markpjohnson
3/15/2017 - 3:54 AM

calculator-bundle.js

calculator-bundle.js

function getNumberFormat(n, t, i) {
    "use strict";
    var f = Math.pow(10, -t),
        e, r, u;
    return i = i || "decimal", i === "percent" ? f /= 100 : i !== "decimal" && (e = i, i = "currency"), window.Intl && Intl.NumberFormat ? r = Intl.NumberFormat(n, {
            style: i,
            currency: e,
            maximumFractionDigits: t,
            minimumFractionDigits: t
        }).format : (u = function (n) {
            var i = Math.pow(10, t);
            return (Math.round(n * i) / i).toFixed(t)
        }, r = i === "percent" ? function (n) {
            return u(n * 100) + "%"
        } : i === "decimal" ? function (n) {
            return u(n)
        } : function (n) {
            return formatCurrency(n, t)
        }),
        function (n) {
            return r(n > 0 ? Math.max(f, n) : n)
        }
}
var DocClickMixin, Tooltip;
! function (n) {
    if ("object" == typeof exports && "undefined" != typeof module) module.exports = n();
    else if ("function" == typeof define && define.amd) define([], n);
    else {
        var t;
        t = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this;
        t.React = n()
    }
}(function () {
    return function n(t, i, r) {
        function u(f, o) {
            var h, c, s;
            if (!i[f]) {
                if (!t[f]) {
                    if (h = "function" == typeof require && require, !o && h) return h(f, !0);
                    if (e) return e(f, !0);
                    c = new Error("Cannot find module '" + f + "'");
                    throw c.code = "MODULE_NOT_FOUND", c;
                }
                s = i[f] = {
                    exports: {}
                };
                t[f][0].call(s.exports, function (n) {
                    var i = t[f][1][n];
                    return u(i ? i : n)
                }, s, s.exports, n, t, i, r)
            }
            return i[f].exports
        }
        for (var e = "function" == typeof require && require, f = 0; f < r.length; f++) u(r[f]);
        return u
    }({
        1: [function (n, t) {
            "use strict";
            var o = n(19),
                u = n(32),
                s = n(34),
                h = n(33),
                c = n(38),
                l = n(39),
                r = n(55),
                a = (n(56), n(40)),
                v = n(51),
                y = n(54),
                p = n(64),
                i = n(68),
                w = n(73),
                b = n(76),
                k = n(79),
                f = n(82),
                d = n(27),
                g = n(115),
                nt = n(142);
            y.inject();
            var tt = r.createElement,
                it = r.createFactory,
                rt = r.cloneElement,
                ut = w.measure("React", "render", i.render),
                e = {
                    Children: {
                        map: u.map,
                        forEach: u.forEach,
                        count: u.count,
                        only: nt
                    },
                    Component: s,
                    DOM: a,
                    PropTypes: b,
                    initializeTouchEvents: function (n) {
                        o.useTouchEvents = n
                    },
                    createClass: h.createClass,
                    createElement: tt,
                    cloneElement: rt,
                    createFactory: it,
                    createMixin: function (n) {
                        return n
                    },
                    constructAndRenderComponent: i.constructAndRenderComponent,
                    constructAndRenderComponentByID: i.constructAndRenderComponentByID,
                    findDOMNode: g,
                    render: ut,
                    renderToString: f.renderToString,
                    renderToStaticMarkup: f.renderToStaticMarkup,
                    unmountComponentAtNode: i.unmountComponentAtNode,
                    isValidElement: r.isValidElement,
                    withContext: c.withContext,
                    __spread: d
                };
            "undefined" != typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" == typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject && __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({
                CurrentOwner: l,
                InstanceHandles: p,
                Mount: i,
                Reconciler: k,
                TextComponent: v
            });
            e.version = "0.13.1";
            t.exports = e
        }, {
            115: 115,
            142: 142,
            19: 19,
            27: 27,
            32: 32,
            33: 33,
            34: 34,
            38: 38,
            39: 39,
            40: 40,
            51: 51,
            54: 54,
            55: 55,
            56: 56,
            64: 64,
            68: 68,
            73: 73,
            76: 76,
            79: 79,
            82: 82
        }],
        2: [function (n, t) {
            "use strict";
            var i = n(117),
                r = {
                    componentDidMount: function () {
                        this.props.autoFocus && i(this.getDOMNode())
                    }
                };
            t.exports = r
        }, {
            117: 117
        }],
        3: [function (n, t) {
            "use strict";

            function k() {
                var n = window.opera;
                return "object" == typeof n && "function" == typeof n.version && parseInt(n.version(), 10) <= 12
            }

            function d(n) {
                return (n.ctrlKey || n.altKey || n.metaKey) && !(n.ctrlKey && n.altKey)
            }

            function g(n) {
                switch (n) {
                    case i.topCompositionStart:
                        return r.compositionStart;
                    case i.topCompositionEnd:
                        return r.compositionEnd;
                    case i.topCompositionUpdate:
                        return r.compositionUpdate
                }
            }

            function nt(n, t) {
                return n === i.topKeyDown && t.keyCode === a
            }

            function s(n, t) {
                switch (n) {
                    case i.topKeyUp:
                        return -1 !== st.indexOf(t.keyCode);
                    case i.topKeyDown:
                        return t.keyCode !== a;
                    case i.topKeyPress:
                    case i.topMouseDown:
                    case i.topBlur:
                        return !0;
                    default:
                        return !1
                }
            }

            function h(n) {
                var t = n.detail;
                return "object" == typeof t && "data" in t ? t.data : null
            }

            function tt(n, t, i, f) {
                var e, a, o, p;
                return (v ? e = g(n) : u ? s(n, f) && (e = r.compositionEnd) : nt(n, f) && (e = r.compositionStart), !e) ? null : (y && (u || e !== r.compositionStart ? e === r.compositionEnd && u && (a = u.getData()) : u = l.getPooled(t)), o = et.getPooled(e, i, f), a ? o.data = a : (p = h(f), null !== p && (o.data = p)), c.accumulateTwoPhaseDispatches(o), o)
            }

            function it(n, t) {
                var u, r;
                switch (n) {
                    case i.topCompositionEnd:
                        return h(t);
                    case i.topKeyPress:
                        return u = t.which, u !== p ? null : (b = !0, w);
                    case i.topTextInput:
                        return r = t.data, r === w && b ? null : r;
                    default:
                        return null
                }
            }

            function rt(n, t) {
                if (u) {
                    if (n === i.topCompositionEnd || s(n, t)) {
                        var r = u.getData();
                        return l.release(u), u = null, r
                    }
                    return null
                }
                switch (n) {
                    case i.topPaste:
                        return null;
                    case i.topKeyPress:
                        return t.which && !d(t) ? String.fromCharCode(t.which) : null;
                    case i.topCompositionEnd:
                        return y ? null : t.data;
                    default:
                        return null
                }
            }

            function ut(n, t, i, u) {
                var e, f;
                return (e = ht ? it(n, u) : rt(n, u), !e) ? null : (f = ot.getPooled(r.beforeInput, i, u), f.data = e, c.accumulateTwoPhaseDispatches(f), f)
            }
            var ft = n(15),
                c = n(20),
                o = n(21),
                l = n(22),
                et = n(91),
                ot = n(95),
                f = n(139),
                st = [9, 13, 27, 32],
                a = 229,
                v = o.canUseDOM && "CompositionEvent" in window,
                e = null;
            o.canUseDOM && "documentMode" in document && (e = document.documentMode);
            var ht = o.canUseDOM && "TextEvent" in window && !e && !k(),
                y = o.canUseDOM && (!v || e && e > 8 && 11 >= e),
                p = 32,
                w = String.fromCharCode(p),
                i = ft.topLevelTypes,
                r = {
                    beforeInput: {
                        phasedRegistrationNames: {
                            bubbled: f({
                                onBeforeInput: null
                            }),
                            captured: f({
                                onBeforeInputCapture: null
                            })
                        },
                        dependencies: [i.topCompositionEnd, i.topKeyPress, i.topTextInput, i.topPaste]
                    },
                    compositionEnd: {
                        phasedRegistrationNames: {
                            bubbled: f({
                                onCompositionEnd: null
                            }),
                            captured: f({
                                onCompositionEndCapture: null
                            })
                        },
                        dependencies: [i.topBlur, i.topCompositionEnd, i.topKeyDown, i.topKeyPress, i.topKeyUp, i.topMouseDown]
                    },
                    compositionStart: {
                        phasedRegistrationNames: {
                            bubbled: f({
                                onCompositionStart: null
                            }),
                            captured: f({
                                onCompositionStartCapture: null
                            })
                        },
                        dependencies: [i.topBlur, i.topCompositionStart, i.topKeyDown, i.topKeyPress, i.topKeyUp, i.topMouseDown]
                    },
                    compositionUpdate: {
                        phasedRegistrationNames: {
                            bubbled: f({
                                onCompositionUpdate: null
                            }),
                            captured: f({
                                onCompositionUpdateCapture: null
                            })
                        },
                        dependencies: [i.topBlur, i.topCompositionUpdate, i.topKeyDown, i.topKeyPress, i.topKeyUp, i.topMouseDown]
                    }
                },
                b = !1,
                u = null,
                ct = {
                    eventTypes: r,
                    extractEvents: function (n, t, i, r) {
                        return [tt(n, t, i, r), ut(n, t, i, r)]
                    }
                };
            t.exports = ct
        }, {
            139: 139,
            15: 15,
            20: 20,
            21: 21,
            22: 22,
            91: 91,
            95: 95
        }],
        4: [function (n, t) {
            "use strict";

            function f(n, t) {
                return n + t.charAt(0).toUpperCase() + t.substring(1)
            }
            var i = {
                    boxFlex: !0,
                    boxFlexGroup: !0,
                    columnCount: !0,
                    flex: !0,
                    flexGrow: !0,
                    flexShrink: !0,
                    fontWeight: !0,
                    lineClamp: !0,
                    lineHeight: !0,
                    opacity: !0,
                    order: !0,
                    orphans: !0,
                    widows: !0,
                    zIndex: !0,
                    zoom: !0,
                    fillOpacity: !0,
                    strokeOpacity: !0
                },
                e = ["Webkit", "ms", "Moz", "O"],
                r, u;
            Object.keys(i).forEach(function (n) {
                e.forEach(function (t) {
                    i[f(t, n)] = i[n]
                })
            });
            r = {
                background: {
                    backgroundImage: !0,
                    backgroundPosition: !0,
                    backgroundRepeat: !0,
                    backgroundColor: !0
                },
                border: {
                    borderWidth: !0,
                    borderStyle: !0,
                    borderColor: !0
                },
                borderBottom: {
                    borderBottomWidth: !0,
                    borderBottomStyle: !0,
                    borderBottomColor: !0
                },
                borderLeft: {
                    borderLeftWidth: !0,
                    borderLeftStyle: !0,
                    borderLeftColor: !0
                },
                borderRight: {
                    borderRightWidth: !0,
                    borderRightStyle: !0,
                    borderRightColor: !0
                },
                borderTop: {
                    borderTopWidth: !0,
                    borderTopStyle: !0,
                    borderTopColor: !0
                },
                font: {
                    fontStyle: !0,
                    fontVariant: !0,
                    fontWeight: !0,
                    fontSize: !0,
                    lineHeight: !0,
                    fontFamily: !0
                }
            };
            u = {
                isUnitlessNumber: i,
                shorthandPropertyExpansions: r
            };
            t.exports = u
        }, {}],
        5: [function (n, t) {
            "use strict";
            var f = n(4),
                e = n(21),
                i = (n(106), n(111)),
                o = n(131),
                s = n(141),
                h = (n(150), s(function (n) {
                    return o(n)
                })),
                r = "cssFloat",
                u;
            e.canUseDOM && void 0 === document.documentElement.style.cssFloat && (r = "styleFloat");
            u = {
                createMarkupForStyles: function (n) {
                    var r = "",
                        t, u;
                    for (t in n) n.hasOwnProperty(t) && (u = n[t], null != u && (r += h(t) + ":", r += i(t, u) + ";"));
                    return r || null
                },
                setValueForStyles: function (n, t) {
                    var e = n.style,
                        u, o, s, h;
                    for (u in t)
                        if (t.hasOwnProperty(u))
                            if (o = i(u, t[u]), "float" === u && (u = r), o) e[u] = o;
                            else if (s = f.shorthandPropertyExpansions[u], s)
                        for (h in s) e[h] = "";
                    else e[u] = ""
                }
            };
            t.exports = u
        }, {
            106: 106,
            111: 111,
            131: 131,
            141: 141,
            150: 150,
            21: 21,
            4: 4
        }],
        6: [function (n, t) {
            "use strict";

            function i() {
                this._callbacks = null;
                this._contexts = null
            }
            var r = n(28),
                u = n(27),
                f = n(133);
            u(i.prototype, {
                enqueue: function (n, t) {
                    this._callbacks = this._callbacks || [];
                    this._contexts = this._contexts || [];
                    this._callbacks.push(n);
                    this._contexts.push(t)
                },
                notifyAll: function () {
                    var n = this._callbacks,
                        i = this._contexts,
                        t, r;
                    if (n) {
                        for (f(n.length === i.length), this._callbacks = null, this._contexts = null, t = 0, r = n.length; r > t; t++) n[t].call(i[t]);
                        n.length = 0;
                        i.length = 0
                    }
                },
                reset: function () {
                    this._callbacks = null;
                    this._contexts = null
                },
                destructor: function () {
                    this.reset()
                }
            });
            r.addPoolingTo(i);
            t.exports = i
        }, {
            133: 133,
            27: 27,
            28: 28
        }],
        7: [function (n, t) {
            "use strict";

            function tt(n) {
                return "SELECT" === n.nodeName || "INPUT" === n.nodeName && "file" === n.type
            }

            function o(n) {
                var t = w.getPooled(s.change, f, n);
                y.accumulateTwoPhaseDispatches(t);
                vt.batchedUpdates(it, t)
            }

            function it(n) {
                v.enqueueEvents(n);
                v.processEventQueue()
            }

            function rt(n, t) {
                r = n;
                f = t;
                r.attachEvent("onchange", o)
            }

            function c() {
                r && (r.detachEvent("onchange", o), r = null, f = null)
            }

            function ut(n, t, r) {
                if (n === i.topChange) return r
            }

            function ft(n, t, r) {
                n === i.topFocus ? (c(), rt(t, r)) : n === i.topBlur && c()
            }

            function et(n, t) {
                r = n;
                f = t;
                u = n.value;
                e = Object.getOwnPropertyDescriptor(n.constructor.prototype, "value");
                Object.defineProperty(r, "value", g);
                r.attachEvent("onpropertychange", a)
            }

            function l() {
                r && (delete r.value, r.detachEvent("onpropertychange", a), r = null, f = null, u = null, e = null)
            }

            function a(n) {
                if ("value" === n.propertyName) {
                    var t = n.srcElement.value;
                    t !== u && (u = t, o(n))
                }
            }

            function ot(n, t, r) {
                if (n === i.topInput) return r
            }

            function st(n, t, r) {
                n === i.topFocus ? (l(), et(t, r)) : n === i.topBlur && l()
            }

            function ht(n) {
                if ((n === i.topSelectionChange || n === i.topKeyUp || n === i.topKeyDown) && r && r.value !== u) return (u = r.value, f)
            }

            function ct(n) {
                return "INPUT" === n.nodeName && ("checkbox" === n.type || "radio" === n.type)
            }

            function lt(n, t, r) {
                if (n === i.topClick) return r
            }
            var at = n(15),
                v = n(17),
                y = n(20),
                p = n(21),
                vt = n(85),
                w = n(93),
                b = n(134),
                yt = n(136),
                k = n(139),
                i = at.topLevelTypes,
                s = {
                    change: {
                        phasedRegistrationNames: {
                            bubbled: k({
                                onChange: null
                            }),
                            captured: k({
                                onChangeCapture: null
                            })
                        },
                        dependencies: [i.topBlur, i.topChange, i.topClick, i.topFocus, i.topInput, i.topKeyDown, i.topKeyUp, i.topSelectionChange]
                    }
                },
                r = null,
                f = null,
                u = null,
                e = null,
                d = !1,
                h, g, nt;
            p.canUseDOM && (d = b("change") && (!("documentMode" in document) || document.documentMode > 8));
            h = !1;
            p.canUseDOM && (h = b("input") && (!("documentMode" in document) || document.documentMode > 9));
            g = {
                get: function () {
                    return e.get.call(this)
                },
                set: function (n) {
                    u = "" + n;
                    e.set.call(this, n)
                }
            };
            nt = {
                eventTypes: s,
                extractEvents: function (n, t, i, r) {
                    var u, f, e, o;
                    if ((tt(t) ? d ? u = ut : f = ft : yt(t) ? h ? u = ot : (u = ht, f = st) : ct(t) && (u = lt), u) && (e = u(n, t, i), e)) return o = w.getPooled(s.change, e, r), y.accumulateTwoPhaseDispatches(o), o;
                    f && f(n, t, i)
                }
            };
            t.exports = nt
        }, {
            134: 134,
            136: 136,
            139: 139,
            15: 15,
            17: 17,
            20: 20,
            21: 21,
            85: 85,
            93: 93
        }],
        8: [function (n, t) {
            "use strict";
            var i = 0,
                r = {
                    createReactRootIndex: function () {
                        return i++
                    }
                };
            t.exports = r
        }, {}],
        9: [function (n, t) {
            "use strict";

            function r(n, t, i) {
                n.insertBefore(t, n.childNodes[i] || null)
            }
            var u = n(12),
                i = n(70),
                f = n(145),
                e = n(133),
                o = {
                    dangerouslyReplaceNodeWithMarkup: u.dangerouslyReplaceNodeWithMarkup,
                    updateTextContent: f,
                    processUpdates: function (n, t) {
                        for (var w, c, l, o, h = null, s = null, a = 0; a < n.length; a++)
                            if (o = n[a], o.type === i.MOVE_EXISTING || o.type === i.REMOVE_NODE) {
                                var p = o.fromIndex,
                                    v = o.parentNode.childNodes[p],
                                    y = o.parentID;
                                e(v);
                                h = h || {};
                                h[y] = h[y] || [];
                                h[y][p] = v;
                                s = s || [];
                                s.push(v)
                            }
                        if (w = u.dangerouslyRenderMarkup(t), s)
                            for (c = 0; c < s.length; c++) s[c].parentNode.removeChild(s[c]);
                        for (l = 0; l < n.length; l++) switch (o = n[l], o.type) {
                            case i.INSERT_MARKUP:
                                r(o.parentNode, w[o.markupIndex], o.toIndex);
                                break;
                            case i.MOVE_EXISTING:
                                r(o.parentNode, h[o.parentID][o.fromIndex], o.toIndex);
                                break;
                            case i.TEXT_CONTENT:
                                f(o.parentNode, o.textContent)
                        }
                    }
                };
            t.exports = o
        }, {
            12: 12,
            133: 133,
            145: 145,
            70: 70
        }],
        10: [function (n, t) {
            "use strict";

            function u(n, t) {
                return (n & t) === t
            }
            var f = n(133),
                r = {
                    MUST_USE_ATTRIBUTE: 1,
                    MUST_USE_PROPERTY: 2,
                    HAS_SIDE_EFFECTS: 4,
                    HAS_BOOLEAN_VALUE: 8,
                    HAS_NUMERIC_VALUE: 16,
                    HAS_POSITIVE_NUMERIC_VALUE: 48,
                    HAS_OVERLOADED_BOOLEAN_VALUE: 64,
                    injectDOMPropertyConfig: function (n) {
                        var h = n.Properties || {},
                            c = n.DOMAttributeNames || {},
                            l = n.DOMPropertyNames || {},
                            a = n.DOMMutationMethods || {},
                            t, o, s, e;
                        n.isCustomAttribute && i._isCustomAttributeFunctions.push(n.isCustomAttribute);
                        for (t in h) f(!i.isStandardName.hasOwnProperty(t)), i.isStandardName[t] = !0, o = t.toLowerCase(), (i.getPossibleStandardName[o] = t, c.hasOwnProperty(t)) ? (s = c[t], i.getPossibleStandardName[s] = t, i.getAttributeName[t] = s) : i.getAttributeName[t] = o, i.getPropertyName[t] = l.hasOwnProperty(t) ? l[t] : t, i.getMutationMethod[t] = a.hasOwnProperty(t) ? a[t] : null, e = h[t], i.mustUseAttribute[t] = u(e, r.MUST_USE_ATTRIBUTE), i.mustUseProperty[t] = u(e, r.MUST_USE_PROPERTY), i.hasSideEffects[t] = u(e, r.HAS_SIDE_EFFECTS), i.hasBooleanValue[t] = u(e, r.HAS_BOOLEAN_VALUE), i.hasNumericValue[t] = u(e, r.HAS_NUMERIC_VALUE), i.hasPositiveNumericValue[t] = u(e, r.HAS_POSITIVE_NUMERIC_VALUE), i.hasOverloadedBooleanValue[t] = u(e, r.HAS_OVERLOADED_BOOLEAN_VALUE), f(!i.mustUseAttribute[t] || !i.mustUseProperty[t]), f(i.mustUseProperty[t] || !i.hasSideEffects[t]), f(!!i.hasBooleanValue[t] + !!i.hasNumericValue[t] + !!i.hasOverloadedBooleanValue[t] <= 1)
                    }
                },
                e = {},
                i = {
                    ID_ATTRIBUTE_NAME: "data-reactid",
                    isStandardName: {},
                    getPossibleStandardName: {},
                    getAttributeName: {},
                    getPropertyName: {},
                    getMutationMethod: {},
                    mustUseAttribute: {},
                    mustUseProperty: {},
                    hasSideEffects: {},
                    hasBooleanValue: {},
                    hasNumericValue: {},
                    hasPositiveNumericValue: {},
                    hasOverloadedBooleanValue: {},
                    _isCustomAttributeFunctions: [],
                    isCustomAttribute: function (n) {
                        for (var r, t = 0; t < i._isCustomAttributeFunctions.length; t++)
                            if (r = i._isCustomAttributeFunctions[t], r(n)) return !0;
                        return !1
                    },
                    getDefaultValueForProperty: function (n, t) {
                        var r, i = e[n];
                        return i || (e[n] = i = {}), t in i || (r = document.createElement(n), i[t] = r[t]), i[t]
                    },
                    injection: r
                };
            t.exports = i
        }, {
            133: 133
        }],
        11: [function (n, t) {
            "use strict";

            function u(n, t) {
                return null == t || i.hasBooleanValue[n] && !t || i.hasNumericValue[n] && isNaN(t) || i.hasPositiveNumericValue[n] && 1 > t || i.hasOverloadedBooleanValue[n] && t === !1
            }
            var i = n(10),
                r = n(143),
                f = (n(150), {
                    createMarkupForID: function (n) {
                        return i.ID_ATTRIBUTE_NAME + "=" + r(n)
                    },
                    createMarkupForProperty: function (n, t) {
                        if (i.isStandardName.hasOwnProperty(n) && i.isStandardName[n]) {
                            if (u(n, t)) return "";
                            var f = i.getAttributeName[n];
                            return i.hasBooleanValue[n] || i.hasOverloadedBooleanValue[n] && t === !0 ? f : f + "=" + r(t)
                        }
                        return i.isCustomAttribute(n) ? null == t ? "" : n + "=" + r(t) : null
                    },
                    setValueForProperty: function (n, t, r) {
                        var f, e;
                        i.isStandardName.hasOwnProperty(t) && i.isStandardName[t] ? (f = i.getMutationMethod[t], f ? f(n, r) : u(t, r) ? this.deleteValueForProperty(n, t) : i.mustUseAttribute[t] ? n.setAttribute(i.getAttributeName[t], "" + r) : (e = i.getPropertyName[t], i.hasSideEffects[t] && "" + n[e] == "" + r || (n[e] = r))) : i.isCustomAttribute(t) && (null == r ? n.removeAttribute(t) : n.setAttribute(t, "" + r))
                    },
                    deleteValueForProperty: function (n, t) {
                        var u, r, f;
                        i.isStandardName.hasOwnProperty(t) && i.isStandardName[t] ? (u = i.getMutationMethod[t], u ? u(n, void 0) : i.mustUseAttribute[t] ? n.removeAttribute(i.getAttributeName[t]) : (r = i.getPropertyName[t], f = i.getDefaultValueForProperty(n.nodeName, r), i.hasSideEffects[t] && "" + n[r] === f || (n[r] = f))) : i.isCustomAttribute(t) && n.removeAttribute(t)
                    }
                });
            t.exports = f
        }, {
            10: 10,
            143: 143,
            150: 150
        }],
        12: [function (n, t) {
            "use strict";

            function o(n) {
                return n.substring(1, n.indexOf(" "))
            }
            var u = n(21),
                f = n(110),
                e = n(112),
                s = n(125),
                i = n(133),
                h = /^(<[^ \/>]+)/,
                r = "data-danger-index",
                c = {
                    dangerouslyRenderMarkup: function (n) {
                        var t, l, a, v, b, c, y, d, k, w, p;
                        for (i(u.canUseDOM), l = {}, a = 0; a < n.length; a++) i(n[a]), t = o(n[a]), t = s(t) ? t : "*", l[t] = l[t] || [], l[t][a] = n[a];
                        v = [];
                        b = 0;
                        for (t in l)
                            if (l.hasOwnProperty(t)) {
                                y = l[t];
                                for (c in y) y.hasOwnProperty(c) && (d = y[c], y[c] = d.replace(h, "$1 " + r + '="' + c + '" '));
                                for (k = f(y.join(""), e), w = 0; w < k.length; ++w) p = k[w], p.hasAttribute && p.hasAttribute(r) && (c = +p.getAttribute(r), p.removeAttribute(r), i(!v.hasOwnProperty(c)), v[c] = p, b += 1)
                            }
                        return i(b === v.length), i(v.length === n.length), v
                    },
                    dangerouslyReplaceNodeWithMarkup: function (n, t) {
                        i(u.canUseDOM);
                        i(t);
                        i("html" !== n.tagName.toLowerCase());
                        var r = f(t, e)[0];
                        n.parentNode.replaceChild(r, n)
                    }
                };
            t.exports = c
        }, {
            110: 110,
            112: 112,
            125: 125,
            133: 133,
            21: 21
        }],
        13: [function (n, t) {
            "use strict";
            var i = n(139),
                r = [i({
                    ResponderEventPlugin: null
                }), i({
                    SimpleEventPlugin: null
                }), i({
                    TapEventPlugin: null
                }), i({
                    EnterLeaveEventPlugin: null
                }), i({
                    ChangeEventPlugin: null
                }), i({
                    SelectEventPlugin: null
                }), i({
                    BeforeInputEventPlugin: null
                }), i({
                    AnalyticsEventPlugin: null
                }), i({
                    MobileSafariClickEventPlugin: null
                })];
            t.exports = r
        }, {
            139: 139
        }],
        14: [function (n, t) {
            "use strict";
            var s = n(15),
                h = n(20),
                e = n(97),
                r = n(68),
                o = n(139),
                i = s.topLevelTypes,
                c = r.getFirstReactDOM,
                u = {
                    mouseEnter: {
                        registrationName: o({
                            onMouseEnter: null
                        }),
                        dependencies: [i.topMouseOut, i.topMouseOver]
                    },
                    mouseLeave: {
                        registrationName: o({
                            onMouseLeave: null
                        }),
                        dependencies: [i.topMouseOut, i.topMouseOver]
                    }
                },
                f = [null, null],
                l = {
                    eventTypes: u,
                    extractEvents: function (n, t, o, s) {
                        var p, w, l, a, v;
                        if (n === i.topMouseOver && (s.relatedTarget || s.fromElement) || n !== i.topMouseOut && n !== i.topMouseOver || (t.window === t ? p = t : (w = t.ownerDocument, p = w ? w.defaultView || w.parentWindow : window), n === i.topMouseOut ? (l = t, a = c(s.relatedTarget || s.toElement) || p) : (l = p, a = t), l === a)) return null;
                        var b = l ? r.getID(l) : "",
                            k = a ? r.getID(a) : "",
                            y = e.getPooled(u.mouseLeave, b, s);
                        return y.type = "mouseleave", y.target = l, y.relatedTarget = a, v = e.getPooled(u.mouseEnter, k, s), v.type = "mouseenter", v.target = a, v.relatedTarget = l, h.accumulateEnterLeaveDispatches(y, v, b, k), f[0] = y, f[1] = v, f
                    }
                };
            t.exports = l
        }, {
            139: 139,
            15: 15,
            20: 20,
            68: 68,
            97: 97
        }],
        15: [function (n, t) {
            "use strict";
            var i = n(138),
                r = i({
                    bubbled: null,
                    captured: null
                }),
                u = i({
                    topBlur: null,
                    topChange: null,
                    topClick: null,
                    topCompositionEnd: null,
                    topCompositionStart: null,
                    topCompositionUpdate: null,
                    topContextMenu: null,
                    topCopy: null,
                    topCut: null,
                    topDoubleClick: null,
                    topDrag: null,
                    topDragEnd: null,
                    topDragEnter: null,
                    topDragExit: null,
                    topDragLeave: null,
                    topDragOver: null,
                    topDragStart: null,
                    topDrop: null,
                    topError: null,
                    topFocus: null,
                    topInput: null,
                    topKeyDown: null,
                    topKeyPress: null,
                    topKeyUp: null,
                    topLoad: null,
                    topMouseDown: null,
                    topMouseMove: null,
                    topMouseOut: null,
                    topMouseOver: null,
                    topMouseUp: null,
                    topPaste: null,
                    topReset: null,
                    topScroll: null,
                    topSelectionChange: null,
                    topSubmit: null,
                    topTextInput: null,
                    topTouchCancel: null,
                    topTouchEnd: null,
                    topTouchMove: null,
                    topTouchStart: null,
                    topWheel: null
                }),
                f = {
                    topLevelTypes: u,
                    PropagationPhases: r
                };
            t.exports = f
        }, {
            138: 138
        }],
        16: [function (n, t) {
            var i = n(112),
                r = {
                    listen: function (n, t, i) {
                        return n.addEventListener ? (n.addEventListener(t, i, !1), {
                            remove: function () {
                                n.removeEventListener(t, i, !1)
                            }
                        }) : n.attachEvent ? (n.attachEvent("on" + t, i), {
                            remove: function () {
                                n.detachEvent("on" + t, i)
                            }
                        }) : void 0
                    },
                    capture: function (n, t, r) {
                        return n.addEventListener ? (n.addEventListener(t, r, !0), {
                            remove: function () {
                                n.removeEventListener(t, r, !0)
                            }
                        }) : {
                            remove: i
                        }
                    },
                    registerDefault: function () {}
                };
            t.exports = r
        }, {
            112: 112
        }],
        17: [function (n, t) {
            "use strict";
            var r = n(18),
                f = n(19),
                e = n(103),
                h = n(118),
                o = n(133),
                i = {},
                u = null,
                c = function (n) {
                    if (n) {
                        var i = f.executeDispatch,
                            t = r.getPluginModuleForEvent(n);
                        t && t.executeDispatch && (i = t.executeDispatch);
                        f.executeDispatchesInOrder(n, i);
                        n.isPersistent() || n.constructor.release(n)
                    }
                },
                s = null,
                l = {
                    injection: {
                        injectMount: f.injection.injectMount,
                        injectInstanceHandle: function (n) {
                            s = n
                        },
                        getInstanceHandle: function () {
                            return s
                        },
                        injectEventPluginOrder: r.injectEventPluginOrder,
                        injectEventPluginsByName: r.injectEventPluginsByName
                    },
                    eventNameDispatchConfigs: r.eventNameDispatchConfigs,
                    registrationNameModules: r.registrationNameModules,
                    putListener: function (n, t, r) {
                        o(!r || "function" == typeof r);
                        var u = i[t] || (i[t] = {});
                        u[n] = r
                    },
                    getListener: function (n, t) {
                        var r = i[t];
                        return r && r[n]
                    },
                    deleteListener: function (n, t) {
                        var r = i[t];
                        r && delete r[n]
                    },
                    deleteAllListeners: function (n) {
                        for (var t in i) delete i[t][n]
                    },
                    extractEvents: function (n, t, i, u) {
                        for (var s, h, f, c = r.plugins, o = 0, l = c.length; l > o; o++) s = c[o], s && (h = s.extractEvents(n, t, i, u), h && (f = e(f, h)));
                        return f
                    },
                    enqueueEvents: function (n) {
                        n && (u = e(u, n))
                    },
                    processEventQueue: function () {
                        var n = u;
                        u = null;
                        h(n, c);
                        o(!u)
                    },
                    __purge: function () {
                        i = {}
                    },
                    __getListenerBank: function () {
                        return i
                    }
                };
            t.exports = l
        }, {
            103: 103,
            118: 118,
            133: 133,
            18: 18,
            19: 19
        }],
        18: [function (n, t) {
            "use strict";

            function e() {
                var e, n, t, o, h;
                if (f)
                    for (e in r)
                        if (n = r[e], t = f.indexOf(e), u(t > -1), !i.plugins[t]) {
                            u(n.extractEvents);
                            i.plugins[t] = n;
                            o = n.eventTypes;
                            for (h in o) u(s(o[h], n, h))
                        }
            }

            function s(n, t, r) {
                var f, e, s;
                if (u(!i.eventNameDispatchConfigs.hasOwnProperty(r)), i.eventNameDispatchConfigs[r] = n, f = n.phasedRegistrationNames, f) {
                    for (e in f) f.hasOwnProperty(e) && (s = f[e], o(s, t, r));
                    return !0
                }
                return n.registrationName ? (o(n.registrationName, t, r), !0) : !1
            }

            function o(n, t, r) {
                u(!i.registrationNameModules[n]);
                i.registrationNameModules[n] = t;
                i.registrationNameDependencies[n] = t.eventTypes[r].dependencies
            }
            var u = n(133),
                f = null,
                r = {},
                i = {
                    plugins: [],
                    eventNameDispatchConfigs: {},
                    registrationNameModules: {},
                    registrationNameDependencies: {},
                    injectEventPluginOrder: function (n) {
                        u(!f);
                        f = Array.prototype.slice.call(n);
                        e()
                    },
                    injectEventPluginsByName: function (n) {
                        var f = !1,
                            t, i;
                        for (t in n) n.hasOwnProperty(t) && (i = n[t], r.hasOwnProperty(t) && r[t] === i || (u(!r[t]), r[t] = i, f = !0));
                        f && e()
                    },
                    getPluginModuleForEvent: function (n) {
                        var t = n.dispatchConfig,
                            r, u;
                        if (t.registrationName) return i.registrationNameModules[t.registrationName] || null;
                        for (r in t.phasedRegistrationNames)
                            if (t.phasedRegistrationNames.hasOwnProperty(r) && (u = i.registrationNameModules[t.phasedRegistrationNames[r]], u)) return u;
                        return null
                    },
                    _resetEventPlugins: function () {
                        var u, n, e, t, o;
                        f = null;
                        for (u in r) r.hasOwnProperty(u) && delete r[u];
                        i.plugins.length = 0;
                        n = i.eventNameDispatchConfigs;
                        for (e in n) n.hasOwnProperty(e) && delete n[e];
                        t = i.registrationNameModules;
                        for (o in t) t.hasOwnProperty(o) && delete t[o]
                    }
                };
            t.exports = i
        }, {
            133: 133
        }],
        19: [function (n, t) {
            "use strict";

            function u(n) {
                return n === i.topMouseUp || n === i.topTouchEnd || n === i.topTouchCancel
            }

            function f(n) {
                return n === i.topMouseMove || n === i.topTouchMove
            }

            function e(n) {
                return n === i.topMouseDown || n === i.topTouchStart
            }

            function o(n, t) {
                var i = n._dispatchListeners,
                    u = n._dispatchIDs,
                    r;
                if (Array.isArray(i))
                    for (r = 0; r < i.length && !n.isPropagationStopped(); r++) t(n, i[r], u[r]);
                else i && t(n, i, u)
            }

            function s(n, t, i) {
                n.currentTarget = r.Mount.getNode(i);
                var u = t(n, i);
                return n.currentTarget = null, u
            }

            function h(n, t) {
                o(n, t);
                n._dispatchListeners = null;
                n._dispatchIDs = null
            }

            function c(n) {
                var i = n._dispatchListeners,
                    r = n._dispatchIDs,
                    t;
                if (Array.isArray(i)) {
                    for (t = 0; t < i.length && !n.isPropagationStopped(); t++)
                        if (i[t](n, r[t])) return r[t]
                } else if (i && i(n, r)) return r;
                return null
            }

            function l(n) {
                var t = c(n);
                return n._dispatchIDs = null, n._dispatchListeners = null, t
            }

            function a(n) {
                var t = n._dispatchListeners,
                    r = n._dispatchIDs,
                    i;
                return p(!Array.isArray(t)), i = t ? t(n, r) : null, n._dispatchListeners = null, n._dispatchIDs = null, i
            }

            function v(n) {
                return !!n._dispatchListeners
            }
            var y = n(15),
                p = n(133),
                r = {
                    Mount: null,
                    injectMount: function (n) {
                        r.Mount = n
                    }
                },
                i = y.topLevelTypes,
                w = {
                    isEndish: u,
                    isMoveish: f,
                    isStartish: e,
                    executeDirectDispatch: a,
                    executeDispatch: s,
                    executeDispatchesInOrder: h,
                    executeDispatchesInOrderStopAtTrue: l,
                    hasDispatches: v,
                    injection: r,
                    useTouchEvents: !1
                };
            t.exports = w
        }, {
            133: 133,
            15: 15
        }],
        20: [function (n, t) {
            "use strict";

            function s(n, t, i) {
                var r = t.dispatchConfig.phasedRegistrationNames[i];
                return o(n, r)
            }

            function h(n, t, r) {
                var f = t ? e.bubbled : e.captured,
                    u = s(n, r, f);
                u && (r._dispatchListeners = i(r._dispatchListeners, u), r._dispatchIDs = i(r._dispatchIDs, n))
            }

            function c(n) {
                n && n.dispatchConfig.phasedRegistrationNames && r.injection.getInstanceHandle().traverseTwoPhase(n.dispatchMarker, h, n)
            }

            function u(n, t, r) {
                if (r && r.dispatchConfig.registrationName) {
                    var f = r.dispatchConfig.registrationName,
                        u = o(n, f);
                    u && (r._dispatchListeners = i(r._dispatchListeners, u), r._dispatchIDs = i(r._dispatchIDs, n))
                }
            }

            function l(n) {
                n && n.dispatchConfig.registrationName && u(n.dispatchMarker, null, n)
            }

            function a(n) {
                f(n, c)
            }

            function v(n, t, i, f) {
                r.injection.getInstanceHandle().traverseEnterLeave(i, f, u, n, t)
            }

            function y(n) {
                f(n, l)
            }
            var p = n(15),
                r = n(17),
                i = n(103),
                f = n(118),
                e = p.PropagationPhases,
                o = r.getListener,
                w = {
                    accumulateTwoPhaseDispatches: a,
                    accumulateDirectDispatches: y,
                    accumulateEnterLeaveDispatches: v
                };
            t.exports = w
        }, {
            103: 103,
            118: 118,
            15: 15,
            17: 17
        }],
        21: [function (n, t) {
            "use strict";
            var i = !("undefined" == typeof window || !window.document || !window.document.createElement),
                r = {
                    canUseDOM: i,
                    canUseWorkers: "undefined" != typeof Worker,
                    canUseEventListeners: i && !(!window.addEventListener && !window.attachEvent),
                    canUseViewport: i && !!window.screen,
                    isInWorker: !i
                };
            t.exports = r
        }, {}],
        22: [function (n, t) {
            "use strict";

            function i(n) {
                this._root = n;
                this._startText = this.getText();
                this._fallbackText = null
            }
            var r = n(28),
                u = n(27),
                f = n(128);
            u(i.prototype, {
                getText: function () {
                    return "value" in this._root ? this._root.value : this._root[f()]
                },
                getData: function () {
                    var f, e;
                    if (this._fallbackText) return this._fallbackText;
                    for (var t, r = this._startText, u = r.length, i = this.getText(), o = i.length, n = 0; u > n && r[n] === i[n]; n++);
                    for (f = u - n, t = 1; f >= t && r[u - t] === i[o - t]; t++);
                    return e = t > 1 ? 1 - t : void 0, this._fallbackText = i.slice(n, e), this._fallbackText
                }
            });
            r.addPoolingTo(i);
            t.exports = i
        }, {
            128: 128,
            27: 27,
            28: 28
        }],
        23: [function (n, t) {
            "use strict";
            var s, f = n(10),
                c = n(21),
                i = f.injection.MUST_USE_ATTRIBUTE,
                u = f.injection.MUST_USE_PROPERTY,
                r = f.injection.HAS_BOOLEAN_VALUE,
                l = f.injection.HAS_SIDE_EFFECTS,
                a = f.injection.HAS_NUMERIC_VALUE,
                e = f.injection.HAS_POSITIVE_NUMERIC_VALUE,
                v = f.injection.HAS_OVERLOADED_BOOLEAN_VALUE,
                o, h;
            c.canUseDOM && (o = document.implementation, s = o && o.hasFeature && o.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
            h = {
                isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),
                Properties: {
                    accept: null,
                    acceptCharset: null,
                    accessKey: null,
                    action: null,
                    allowFullScreen: i | r,
                    allowTransparency: i,
                    alt: null,
                    async: r,
                    autoComplete: null,
                    autoPlay: r,
                    cellPadding: null,
                    cellSpacing: null,
                    charSet: i,
                    checked: u | r,
                    classID: i,
                    className: s ? i : u,
                    cols: i | e,
                    colSpan: null,
                    content: null,
                    contentEditable: null,
                    contextMenu: i,
                    controls: u | r,
                    coords: null,
                    crossOrigin: null,
                    data: null,
                    dateTime: i,
                    defer: r,
                    dir: null,
                    disabled: i | r,
                    download: v,
                    draggable: null,
                    encType: null,
                    form: i,
                    formAction: i,
                    formEncType: i,
                    formMethod: i,
                    formNoValidate: r,
                    formTarget: i,
                    frameBorder: i,
                    headers: null,
                    height: i,
                    hidden: i | r,
                    href: null,
                    hrefLang: null,
                    htmlFor: null,
                    httpEquiv: null,
                    icon: null,
                    id: u,
                    label: null,
                    lang: null,
                    list: i,
                    loop: u | r,
                    manifest: i,
                    marginHeight: null,
                    marginWidth: null,
                    max: null,
                    maxLength: i,
                    media: i,
                    mediaGroup: null,
                    method: null,
                    min: null,
                    multiple: u | r,
                    muted: u | r,
                    name: null,
                    noValidate: r,
                    open: r,
                    pattern: null,
                    placeholder: null,
                    poster: null,
                    preload: null,
                    radioGroup: null,
                    readOnly: u | r,
                    rel: null,
                    required: r,
                    role: i,
                    rows: i | e,
                    rowSpan: null,
                    sandbox: null,
                    scope: null,
                    scrolling: null,
                    seamless: i | r,
                    selected: u | r,
                    shape: null,
                    size: i | e,
                    sizes: i,
                    span: e,
                    spellCheck: null,
                    src: null,
                    srcDoc: u,
                    srcSet: i,
                    start: a,
                    step: null,
                    style: null,
                    tabIndex: null,
                    target: null,
                    title: null,
                    type: null,
                    useMap: null,
                    value: u | l,
                    width: i,
                    wmode: i,
                    autoCapitalize: null,
                    autoCorrect: null,
                    itemProp: i,
                    itemScope: i | r,
                    itemType: i,
                    itemID: i,
                    itemRef: i,
                    property: null
                },
                DOMAttributeNames: {
                    acceptCharset: "accept-charset",
                    className: "class",
                    htmlFor: "for",
                    httpEquiv: "http-equiv"
                },
                DOMPropertyNames: {
                    autoCapitalize: "autocapitalize",
                    autoComplete: "autocomplete",
                    autoCorrect: "autocorrect",
                    autoFocus: "autofocus",
                    autoPlay: "autoplay",
                    encType: "encoding",
                    hrefLang: "hreflang",
                    radioGroup: "radiogroup",
                    spellCheck: "spellcheck",
                    srcDoc: "srcdoc",
                    srcSet: "srcset"
                }
            };
            t.exports = h
        }, {
            10: 10,
            21: 21
        }],
        24: [function (n, t) {
            "use strict";

            function r(n) {
                i(null == n.props.checkedLink || null == n.props.valueLink)
            }

            function u(n) {
                r(n);
                i(null == n.props.value && null == n.props.onChange)
            }

            function f(n) {
                r(n);
                i(null == n.props.checked && null == n.props.onChange)
            }

            function e(n) {
                this.props.valueLink.requestChange(n.target.value)
            }

            function o(n) {
                this.props.checkedLink.requestChange(n.target.checked)
            }
            var s = n(76),
                i = n(133),
                h = {
                    button: !0,
                    checkbox: !0,
                    image: !0,
                    hidden: !0,
                    radio: !0,
                    reset: !0,
                    submit: !0
                },
                c = {
                    Mixin: {
                        propTypes: {
                            value: function (n, t) {
                                return !n[t] || h[n.type] || n.onChange || n.readOnly || n.disabled ? null : new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")
                            },
                            checked: function (n, t) {
                                return !n[t] || n.onChange || n.readOnly || n.disabled ? null : new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")
                            },
                            onChange: s.func
                        }
                    },
                    getValue: function (n) {
                        return n.props.valueLink ? (u(n), n.props.valueLink.value) : n.props.value
                    },
                    getChecked: function (n) {
                        return n.props.checkedLink ? (f(n), n.props.checkedLink.value) : n.props.checked
                    },
                    getOnChange: function (n) {
                        return n.props.valueLink ? (u(n), e) : n.props.checkedLink ? (f(n), o) : n.props.onChange
                    }
                };
            t.exports = c
        }, {
            133: 133,
            76: 76
        }],
        25: [function (n, t) {
            "use strict";

            function r(n) {
                n.remove()
            }
            var u = n(30),
                f = n(103),
                e = n(118),
                i = n(133),
                o = {
                    trapBubbledEvent: function (n, t) {
                        var r, e;
                        i(this.isMounted());
                        r = this.getDOMNode();
                        i(r);
                        e = u.trapBubbledEvent(n, t, r);
                        this._localEventListeners = f(this._localEventListeners, e)
                    },
                    componentWillUnmount: function () {
                        this._localEventListeners && e(this._localEventListeners, r)
                    }
                };
            t.exports = o
        }, {
            103: 103,
            118: 118,
            133: 133,
            30: 30
        }],
        26: [function (n, t) {
            "use strict";
            var i = n(15),
                r = n(112),
                u = i.topLevelTypes,
                f = {
                    eventTypes: null,
                    extractEvents: function (n, t, i, f) {
                        if (n === u.topTouchStart) {
                            var e = f.target;
                            e && !e.onclick && (e.onclick = r)
                        }
                    }
                };
            t.exports = f
        }, {
            112: 112,
            15: 15
        }],
        27: [function (n, t) {
            "use strict";

            function i(n) {
                var u, t, i;
                if (null == n) throw new TypeError("Object.assign target cannot be null or undefined");
                for (var f = Object(n), e = Object.prototype.hasOwnProperty, r = 1; r < arguments.length; r++)
                    if (u = arguments[r], null != u) {
                        t = Object(u);
                        for (i in t) e.call(t, i) && (f[i] = t[i])
                    }
                return f
            }
            t.exports = i
        }, {}],
        28: [function (n, t) {
            "use strict";
            var r = n(133),
                i = function (n) {
                    var t = this,
                        i;
                    return t.instancePool.length ? (i = t.instancePool.pop(), t.call(i, n), i) : new t(n)
                },
                u = function (n, t) {
                    var i = this,
                        r;
                    return i.instancePool.length ? (r = i.instancePool.pop(), i.call(r, n, t), r) : new i(n, t)
                },
                f = function (n, t, i) {
                    var r = this,
                        u;
                    return r.instancePool.length ? (u = r.instancePool.pop(), r.call(u, n, t, i), u) : new r(n, t, i)
                },
                e = function (n, t, i, r, u) {
                    var f = this,
                        e;
                    return f.instancePool.length ? (e = f.instancePool.pop(), f.call(e, n, t, i, r, u), e) : new f(n, t, i, r, u)
                },
                o = function (n) {
                    var t = this;
                    r(n instanceof t);
                    n.destructor && n.destructor();
                    t.instancePool.length < t.poolSize && t.instancePool.push(n)
                },
                s = 10,
                h = i,
                c = function (n, t) {
                    var i = n;
                    return i.instancePool = [], i.getPooled = t || h, i.poolSize || (i.poolSize = s), i.release = o, i
                },
                l = {
                    addPoolingTo: c,
                    oneArgumentPooler: i,
                    twoArgumentPooler: u,
                    threeArgumentPooler: f,
                    fiveArgumentPooler: e
                };
            t.exports = l
        }, {
            133: 133
        }],
        29: [function (n, t) {
            "use strict";
            var i = n(115),
                r = {
                    getDOMNode: function () {
                        return i(this)
                    }
                };
            t.exports = r
        }, {
            115: 115
        }],
        30: [function (n, t) {
            "use strict";

            function h(n) {
                return Object.prototype.hasOwnProperty.call(n, f) || (n[f] = p++, e[n[f]] = {}), e[n[f]]
            }
            var c = n(15),
                r = n(17),
                l = n(18),
                a = n(59),
                v = n(102),
                y = n(27),
                u = n(134),
                e = {},
                o = !1,
                p = 0,
                s = {
                    topBlur: "blur",
                    topChange: "change",
                    topClick: "click",
                    topCompositionEnd: "compositionend",
                    topCompositionStart: "compositionstart",
                    topCompositionUpdate: "compositionupdate",
                    topContextMenu: "contextmenu",
                    topCopy: "copy",
                    topCut: "cut",
                    topDoubleClick: "dblclick",
                    topDrag: "drag",
                    topDragEnd: "dragend",
                    topDragEnter: "dragenter",
                    topDragExit: "dragexit",
                    topDragLeave: "dragleave",
                    topDragOver: "dragover",
                    topDragStart: "dragstart",
                    topDrop: "drop",
                    topFocus: "focus",
                    topInput: "input",
                    topKeyDown: "keydown",
                    topKeyPress: "keypress",
                    topKeyUp: "keyup",
                    topMouseDown: "mousedown",
                    topMouseMove: "mousemove",
                    topMouseOut: "mouseout",
                    topMouseOver: "mouseover",
                    topMouseUp: "mouseup",
                    topPaste: "paste",
                    topScroll: "scroll",
                    topSelectionChange: "selectionchange",
                    topTextInput: "textInput",
                    topTouchCancel: "touchcancel",
                    topTouchEnd: "touchend",
                    topTouchMove: "touchmove",
                    topTouchStart: "touchstart",
                    topWheel: "wheel"
                },
                f = "_reactListenersID" + String(Math.random()).slice(2),
                i = y({}, a, {
                    ReactEventListener: null,
                    injection: {
                        injectReactEventListener: function (n) {
                            n.setHandleTopLevel(i.handleTopLevel);
                            i.ReactEventListener = n
                        }
                    },
                    setEnabled: function (n) {
                        i.ReactEventListener && i.ReactEventListener.setEnabled(n)
                    },
                    isEnabled: function () {
                        return !(!i.ReactEventListener || !i.ReactEventListener.isEnabled())
                    },
                    listenTo: function (n, t) {
                        for (var f, e = t, o = h(e), v = l.registrationNameDependencies[n], r = c.topLevelTypes, a = 0, y = v.length; y > a; a++) f = v[a], o.hasOwnProperty(f) && o[f] || (f === r.topWheel ? u("wheel") ? i.ReactEventListener.trapBubbledEvent(r.topWheel, "wheel", e) : u("mousewheel") ? i.ReactEventListener.trapBubbledEvent(r.topWheel, "mousewheel", e) : i.ReactEventListener.trapBubbledEvent(r.topWheel, "DOMMouseScroll", e) : f === r.topScroll ? u("scroll", !0) ? i.ReactEventListener.trapCapturedEvent(r.topScroll, "scroll", e) : i.ReactEventListener.trapBubbledEvent(r.topScroll, "scroll", i.ReactEventListener.WINDOW_HANDLE) : f === r.topFocus || f === r.topBlur ? (u("focus", !0) ? (i.ReactEventListener.trapCapturedEvent(r.topFocus, "focus", e), i.ReactEventListener.trapCapturedEvent(r.topBlur, "blur", e)) : u("focusin") && (i.ReactEventListener.trapBubbledEvent(r.topFocus, "focusin", e), i.ReactEventListener.trapBubbledEvent(r.topBlur, "focusout", e)), o[r.topBlur] = !0, o[r.topFocus] = !0) : s.hasOwnProperty(f) && i.ReactEventListener.trapBubbledEvent(f, s[f], e), o[f] = !0)
                    },
                    trapBubbledEvent: function (n, t, r) {
                        return i.ReactEventListener.trapBubbledEvent(n, t, r)
                    },
                    trapCapturedEvent: function (n, t, r) {
                        return i.ReactEventListener.trapCapturedEvent(n, t, r)
                    },
                    ensureScrollValueMonitoring: function () {
                        if (!o) {
                            var n = v.refreshScrollValues;
                            i.ReactEventListener.monitorScrollValue(n);
                            o = !0
                        }
                    },
                    eventNameDispatchConfigs: r.eventNameDispatchConfigs,
                    registrationNameModules: r.registrationNameModules,
                    putListener: r.putListener,
                    getListener: r.getListener,
                    deleteListener: r.deleteListener,
                    deleteAllListeners: r.deleteAllListeners
                });
            t.exports = i
        }, {
            102: 102,
            134: 134,
            15: 15,
            17: 17,
            18: 18,
            27: 27,
            59: 59
        }],
        31: [function (n, t) {
            "use strict";
            var i = n(79),
                r = n(116),
                u = n(132),
                f = n(147),
                e = {
                    instantiateChildren: function (n) {
                        var t = r(n),
                            i, f, e;
                        for (i in t) t.hasOwnProperty(i) && (f = t[i], e = u(f, null), t[i] = e);
                        return t
                    },
                    updateChildren: function (n, t, e, o) {
                        var h = r(t),
                            s, a;
                        if (!h && !n) return null;
                        for (s in h)
                            if (h.hasOwnProperty(s)) {
                                var c = n && n[s],
                                    v = c && c._currentElement,
                                    l = h[s];
                                f(v, l) ? (i.receiveComponent(c, l, e, o), h[s] = c) : (c && i.unmountComponent(c, s), a = u(l, null), h[s] = a)
                            }
                        for (s in n) !n.hasOwnProperty(s) || h && h.hasOwnProperty(s) || i.unmountComponent(n[s]);
                        return h
                    },
                    unmountChildren: function (n) {
                        var t, r;
                        for (t in n) r = n[t], i.unmountComponent(r)
                    }
                };
            t.exports = e
        }, {
            116: 116,
            132: 132,
            147: 147,
            79: 79
        }],
        32: [function (n, t) {
            "use strict";

            function r(n, t) {
                this.forEachFunction = n;
                this.forEachContext = t
            }

            function o(n, t, i, r) {
                var u = n;
                u.forEachFunction.call(u.forEachContext, t, r)
            }

            function s(n, t, i) {
                if (null == n) return n;
                var u = r.getPooled(t, i);
                f(n, o, u);
                r.release(u)
            }

            function u(n, t, i) {
                this.mapResult = n;
                this.mapFunction = t;
                this.mapContext = i
            }

            function h(n, t, i, r) {
                var u = n,
                    f = u.mapResult,
                    o = !f.hasOwnProperty(i),
                    e;
                o && (e = u.mapFunction.call(u.mapContext, t, r), f[i] = e)
            }

            function c(n, t, i) {
                if (null == n) return n;
                var r = {},
                    e = u.getPooled(r, t, i);
                return f(n, h, e), u.release(e), v.create(r)
            }

            function l() {
                return null
            }

            function a(n) {
                return f(n, l, null)
            }
            var i = n(28),
                v = n(61),
                f = n(149),
                y = (n(150), i.twoArgumentPooler),
                p = i.threeArgumentPooler,
                e;
            i.addPoolingTo(r, y);
            i.addPoolingTo(u, p);
            e = {
                forEach: s,
                map: c,
                count: a
            };
            t.exports = e
        }, {
            149: 149,
            150: 150,
            28: 28,
            61: 61
        }],
        33: [function (n, t) {
            "use strict";

            function w(n, t) {
                var u = f.hasOwnProperty(t) ? f[t] : null;
                v.hasOwnProperty(t) && r(u === i.OVERRIDE_BASE);
                n.hasOwnProperty(t) && r(u === i.DEFINE_MANY || u === i.DEFINE_MANY_MERGED)
            }

            function s(n, t) {
                var e, u, s, h;
                if (t) {
                    r("function" != typeof t);
                    r(!tt.isValidElement(t));
                    e = n.prototype;
                    t.hasOwnProperty(l) && o.mixins(n, t.mixins);
                    for (u in t)
                        if (t.hasOwnProperty(u) && u !== l)
                            if (s = t[u], w(e, u), o.hasOwnProperty(u)) o[u](n, s);
                            else {
                                var a = f.hasOwnProperty(u),
                                    v = e.hasOwnProperty(u),
                                    y = s && s.__reactDontBind,
                                    p = "function" == typeof s,
                                    b = p && !a && !v && !y;
                                b ? (e.__reactAutoBindMap || (e.__reactAutoBindMap = {}), e.__reactAutoBindMap[u] = s, e[u] = s) : v ? (h = f[u], r(a && (h === i.DEFINE_MANY_MERGED || h === i.DEFINE_MANY)), h === i.DEFINE_MANY_MERGED ? e[u] = c(e[u], s) : h === i.DEFINE_MANY && (e[u] = k(e[u], s))) : e[u] = s
                            }
                }
            }

            function b(n, t) {
                var i, u, f, e;
                if (t)
                    for (i in t) u = t[i], t.hasOwnProperty(i) && (f = i in o, r(!f), e = i in n, r(!e), n[i] = u)
            }

            function h(n, t) {
                r(n && t && "object" == typeof n && "object" == typeof t);
                for (var i in t) t.hasOwnProperty(i) && (r(void 0 === n[i]), n[i] = t[i]);
                return n
            }

            function c(n, t) {
                return function () {
                    var r = n.apply(this, arguments),
                        u = t.apply(this, arguments),
                        i;
                    return null == r ? u : null == u ? r : (i = {}, h(i, r), h(i, u), i)
                }
            }

            function k(n, t) {
                return function () {
                    n.apply(this, arguments);
                    t.apply(this, arguments)
                }
            }

            function d(n, t) {
                return t.bind(n)
            }

            function g(n) {
                var t, i;
                for (t in n.__reactAutoBindMap) n.__reactAutoBindMap.hasOwnProperty(t) && (i = n.__reactAutoBindMap[t], n[t] = d(n, it.guard(i, n.constructor.displayName + "." + t)))
            }
            var nt = n(34),
                tt = (n(39), n(55)),
                it = n(58),
                rt = n(65),
                ut = n(66),
                u = (n(75), n(74), n(84)),
                e = n(27),
                r = n(133),
                ft = n(138),
                et = n(139),
                l = (n(150), et({
                    mixins: null
                })),
                i = ft({
                    DEFINE_ONCE: null,
                    DEFINE_MANY: null,
                    OVERRIDE_BASE: null,
                    DEFINE_MANY_MERGED: null
                }),
                a = [],
                f = {
                    mixins: i.DEFINE_MANY,
                    statics: i.DEFINE_MANY,
                    propTypes: i.DEFINE_MANY,
                    contextTypes: i.DEFINE_MANY,
                    childContextTypes: i.DEFINE_MANY,
                    getDefaultProps: i.DEFINE_MANY_MERGED,
                    getInitialState: i.DEFINE_MANY_MERGED,
                    getChildContext: i.DEFINE_MANY_MERGED,
                    render: i.DEFINE_ONCE,
                    componentWillMount: i.DEFINE_MANY,
                    componentDidMount: i.DEFINE_MANY,
                    componentWillReceiveProps: i.DEFINE_MANY,
                    shouldComponentUpdate: i.DEFINE_ONCE,
                    componentWillUpdate: i.DEFINE_MANY,
                    componentDidUpdate: i.DEFINE_MANY,
                    componentWillUnmount: i.DEFINE_MANY,
                    updateComponent: i.OVERRIDE_BASE
                },
                o = {
                    displayName: function (n, t) {
                        n.displayName = t
                    },
                    mixins: function (n, t) {
                        if (t)
                            for (var i = 0; i < t.length; i++) s(n, t[i])
                    },
                    childContextTypes: function (n, t) {
                        n.childContextTypes = e({}, n.childContextTypes, t)
                    },
                    contextTypes: function (n, t) {
                        n.contextTypes = e({}, n.contextTypes, t)
                    },
                    getDefaultProps: function (n, t) {
                        n.getDefaultProps = n.getDefaultProps ? c(n.getDefaultProps, t) : t
                    },
                    propTypes: function (n, t) {
                        n.propTypes = e({}, n.propTypes, t)
                    },
                    statics: function (n, t) {
                        b(n, t)
                    }
                },
                v = {
                    replaceState: function (n, t) {
                        u.enqueueReplaceState(this, n);
                        t && u.enqueueCallback(this, t)
                    },
                    isMounted: function () {
                        var n = rt.get(this);
                        return n && n !== ut.currentlyMountingInstance
                    },
                    setProps: function (n, t) {
                        u.enqueueSetProps(this, n);
                        t && u.enqueueCallback(this, t)
                    },
                    replaceProps: function (n, t) {
                        u.enqueueReplaceProps(this, n);
                        t && u.enqueueCallback(this, t)
                    }
                },
                y = function () {},
                p;
            e(y.prototype, nt.prototype, v);
            p = {
                createClass: function (n) {
                    var t = function (n, t) {
                            this.__reactAutoBindMap && g(this);
                            this.props = n;
                            this.context = t;
                            this.state = null;
                            var i = this.getInitialState ? this.getInitialState() : null;
                            r("object" == typeof i && !Array.isArray(i));
                            this.state = i
                        },
                        i;
                    t.prototype = new y;
                    t.prototype.constructor = t;
                    a.forEach(s.bind(null, t));
                    s(t, n);
                    t.getDefaultProps && (t.defaultProps = t.getDefaultProps());
                    r(t.prototype.render);
                    for (i in f) t.prototype[i] || (t.prototype[i] = null);
                    return t.type = t, t
                },
                injection: {
                    injectMixin: function (n) {
                        a.push(n)
                    }
                }
            };
            t.exports = p
        }, {
            133: 133,
            138: 138,
            139: 139,
            150: 150,
            27: 27,
            34: 34,
            39: 39,
            55: 55,
            58: 58,
            65: 65,
            66: 66,
            74: 74,
            75: 75,
            84: 84
        }],
        34: [function (n, t) {
            "use strict";

            function r(n, t) {
                this.props = n;
                this.context = t
            }
            var i = n(84),
                u = n(133);
            n(150);
            r.prototype.setState = function (n, t) {
                u("object" == typeof n || "function" == typeof n || null == n);
                i.enqueueSetState(this, n);
                t && i.enqueueCallback(this, t)
            };
            r.prototype.forceUpdate = function (n) {
                i.enqueueForceUpdate(this);
                n && i.enqueueCallback(this, n)
            };
            t.exports = r
        }, {
            133: 133,
            150: 150,
            84: 84
        }],
        35: [function (n, t) {
            "use strict";
            var i = n(44),
                r = n(68),
                u = {
                    processChildrenUpdates: i.dangerouslyProcessChildrenUpdates,
                    replaceNodeWithMarkupByID: i.dangerouslyReplaceNodeWithMarkupByID,
                    unmountIDFromEnvironment: function (n) {
                        r.purgeID(n)
                    }
                };
            t.exports = u
        }, {
            44: 44,
            68: 68
        }],
        36: [function (n, t) {
            "use strict";
            var u = n(133),
                r = !1,
                i = {
                    unmountIDFromEnvironment: null,
                    replaceNodeWithMarkupByID: null,
                    processChildrenUpdates: null,
                    injection: {
                        injectEnvironment: function (n) {
                            u(!r);
                            i.unmountIDFromEnvironment = n.unmountIDFromEnvironment;
                            i.replaceNodeWithMarkupByID = n.replaceNodeWithMarkupByID;
                            i.processChildrenUpdates = n.processChildrenUpdates;
                            r = !0
                        }
                    }
                };
            t.exports = i
        }, {
            133: 133
        }],
        37: [function (n, t) {
            "use strict";

            function v(n) {
                var i = n._currentElement._owner || null,
                    t;
                return i && (t = i.getName(), t) ? " Check the render method of `" + t + "`." : ""
            }
            var y = n(36),
                o = n(38),
                s = n(39),
                h = n(55),
                c = (n(56), n(65)),
                i = n(66),
                p = n(71),
                w = n(73),
                b = n(75),
                r = (n(74), n(79)),
                k = n(85),
                f = n(27),
                e = n(113),
                u = n(133),
                d = n(147),
                g = (n(150), 1),
                l = {
                    construct: function (n) {
                        this._currentElement = n;
                        this._rootNodeID = null;
                        this._instance = null;
                        this._pendingElement = null;
                        this._pendingStateQueue = null;
                        this._pendingReplaceState = !1;
                        this._pendingForceUpdate = !1;
                        this._renderedComponent = null;
                        this._context = null;
                        this._mountOrder = 0;
                        this._isTopLevel = !1;
                        this._pendingCallbacks = null
                    },
                    mountComponent: function (n, t, f) {
                        var s, a, v, y;
                        this._context = f;
                        this._mountOrder = g++;
                        this._rootNodeID = n;
                        var h = this._processProps(this._currentElement.props),
                            l = this._processContext(this._currentElement._context),
                            w = p.getComponentClassForElement(this._currentElement),
                            o = new w(h, l);
                        o.props = h;
                        o.context = l;
                        o.refs = e;
                        this._instance = o;
                        c.set(o, this);
                        s = o.state;
                        void 0 === s && (o.state = s = null);
                        u("object" == typeof s && !Array.isArray(s));
                        this._pendingStateQueue = null;
                        this._pendingReplaceState = !1;
                        this._pendingForceUpdate = !1;
                        v = i.currentlyMountingInstance;
                        i.currentlyMountingInstance = this;
                        try {
                            o.componentWillMount && (o.componentWillMount(), this._pendingStateQueue && (o.state = this._processPendingState(o.props, o.context)));
                            a = this._renderValidatedComponent()
                        } finally {
                            i.currentlyMountingInstance = v
                        }
                        return this._renderedComponent = this._instantiateReactComponent(a, this._currentElement.type), y = r.mountComponent(this._renderedComponent, n, t, this._processChildContext(f)), o.componentDidMount && t.getReactMountReady().enqueue(o.componentDidMount, o), y
                    },
                    unmountComponent: function () {
                        var n = this._instance,
                            t;
                        if (n.componentWillUnmount) {
                            t = i.currentlyUnmountingInstance;
                            i.currentlyUnmountingInstance = this;
                            try {
                                n.componentWillUnmount()
                            } finally {
                                i.currentlyUnmountingInstance = t
                            }
                        }
                        r.unmountComponent(this._renderedComponent);
                        this._renderedComponent = null;
                        this._pendingStateQueue = null;
                        this._pendingReplaceState = !1;
                        this._pendingForceUpdate = !1;
                        this._pendingCallbacks = null;
                        this._pendingElement = null;
                        this._context = null;
                        this._rootNodeID = null;
                        c.remove(n)
                    },
                    _setPropsInternal: function (n, t) {
                        var i = this._pendingElement || this._currentElement;
                        this._pendingElement = h.cloneAndReplaceProps(i, f({}, i.props, n));
                        k.enqueueUpdate(this, t)
                    },
                    _maskContext: function (n) {
                        var t = null,
                            i, r;
                        if ("string" == typeof this._currentElement.type || (i = this._currentElement.type.contextTypes, !i)) return e;
                        t = {};
                        for (r in i) t[r] = n[r];
                        return t
                    },
                    _processContext: function (n) {
                        return this._maskContext(n)
                    },
                    _processChildContext: function (n) {
                        var t = this._instance,
                            i = t.getChildContext && t.getChildContext(),
                            r;
                        if (i) {
                            u("object" == typeof t.constructor.childContextTypes);
                            for (r in i) u(r in t.constructor.childContextTypes);
                            return f({}, n, i)
                        }
                        return n
                    },
                    _processProps: function (n) {
                        return n
                    },
                    _checkPropTypes: function (n, t, i) {
                        var e = this.getName(),
                            r, f;
                        for (r in n)
                            if (n.hasOwnProperty(r)) {
                                try {
                                    u("function" == typeof n[r]);
                                    f = n[r](t, r, e, i)
                                } catch (o) {
                                    f = o
                                }
                                f instanceof Error && (v(this), i === b.prop)
                            }
                    },
                    receiveComponent: function (n, t, i) {
                        var r = this._currentElement,
                            u = this._context;
                        this._pendingElement = null;
                        this.updateComponent(t, r, n, u, i)
                    },
                    performUpdateIfNecessary: function (n) {
                        null != this._pendingElement && r.receiveComponent(this, this._pendingElement || this._currentElement, n, this._context);
                        (null !== this._pendingStateQueue || this._pendingForceUpdate) && this.updateComponent(n, this._currentElement, this._currentElement, this._context, this._context)
                    },
                    _warnIfContextsDiffer: function (n, t) {
                        n = this._maskContext(n);
                        t = this._maskContext(t);
                        for (var r = Object.keys(t).sort(), i = (this.getName() || "ReactCompositeComponent", 0); i < r.length; i++) r[i]
                    },
                    updateComponent: function (n, t, i, r, u) {
                        var f = this._instance,
                            e = f.context,
                            o = f.props,
                            s, h;
                        t !== i && (e = this._processContext(i._context), o = this._processProps(i.props), f.componentWillReceiveProps && f.componentWillReceiveProps(o, e));
                        s = this._processPendingState(o, e);
                        h = this._pendingForceUpdate || !f.shouldComponentUpdate || f.shouldComponentUpdate(o, s, e);
                        h ? (this._pendingForceUpdate = !1, this._performComponentUpdate(i, o, s, e, n, u)) : (this._currentElement = i, this._context = u, f.props = o, f.state = s, f.context = e)
                    },
                    _processPendingState: function (n, t) {
                        var o = this._instance,
                            i = this._pendingStateQueue,
                            s = this._pendingReplaceState,
                            r, u, e;
                        if (this._pendingReplaceState = !1, this._pendingStateQueue = null, !i) return o.state;
                        for (r = f({}, s ? i[0] : o.state), u = s ? 1 : 0; u < i.length; u++) e = i[u], f(r, "function" == typeof e ? e.call(o, r, n, t) : e);
                        return r
                    },
                    _performComponentUpdate: function (n, t, i, r, u, f) {
                        var e = this._instance,
                            o = e.props,
                            s = e.state,
                            h = e.context;
                        e.componentWillUpdate && e.componentWillUpdate(t, i, r);
                        this._currentElement = n;
                        this._context = f;
                        e.props = t;
                        e.state = i;
                        e.context = r;
                        this._updateRenderedComponent(u, f);
                        e.componentDidUpdate && u.getReactMountReady().enqueue(e.componentDidUpdate.bind(e, o, s, h), e)
                    },
                    _updateRenderedComponent: function (n, t) {
                        var i = this._renderedComponent,
                            s = i._currentElement,
                            u = this._renderValidatedComponent(),
                            f, e, o;
                        d(s, u) ? r.receiveComponent(i, u, n, this._processChildContext(t)) : (f = this._rootNodeID, e = i._rootNodeID, r.unmountComponent(i), this._renderedComponent = this._instantiateReactComponent(u, this._currentElement.type), o = r.mountComponent(this._renderedComponent, f, n, t), this._replaceNodeWithMarkupByID(e, o))
                    },
                    _replaceNodeWithMarkupByID: function (n, t) {
                        y.replaceNodeWithMarkupByID(n, t)
                    },
                    _renderValidatedComponentWithoutOwnerOrContext: function () {
                        var n = this._instance;
                        return n.render()
                    },
                    _renderValidatedComponent: function () {
                        var n, t = o.current;
                        o.current = this._processChildContext(this._currentElement._context);
                        s.current = this;
                        try {
                            n = this._renderValidatedComponentWithoutOwnerOrContext()
                        } finally {
                            o.current = t;
                            s.current = null
                        }
                        return u(null === n || n === !1 || h.isValidElement(n)), n
                    },
                    attachRef: function (n, t) {
                        var i = this.getPublicInstance(),
                            r = i.refs === e ? i.refs = {} : i.refs;
                        r[n] = t.getPublicInstance()
                    },
                    detachRef: function (n) {
                        var t = this.getPublicInstance().refs;
                        delete t[n]
                    },
                    getName: function () {
                        var t = this._currentElement.type,
                            n = this._instance && this._instance.constructor;
                        return t.displayName || n && n.displayName || t.name || n && n.name || null
                    },
                    getPublicInstance: function () {
                        return this._instance
                    },
                    _instantiateReactComponent: null
                },
                a;
            w.measureMethods(l, "ReactCompositeComponent", {
                mountComponent: "mountComponent",
                updateComponent: "updateComponent",
                _renderValidatedComponent: "_renderValidatedComponent"
            });
            a = {
                Mixin: l
            };
            t.exports = a
        }, {
            113: 113,
            133: 133,
            147: 147,
            150: 150,
            27: 27,
            36: 36,
            38: 38,
            39: 39,
            55: 55,
            56: 56,
            65: 65,
            66: 66,
            71: 71,
            73: 73,
            74: 74,
            75: 75,
            79: 79,
            85: 85
        }],
        38: [function (n, t) {
            "use strict";
            var r = n(27),
                u = n(113),
                i = (n(150), {
                    current: u,
                    withContext: function (n, t) {
                        var u, f = i.current;
                        i.current = r({}, f, n);
                        try {
                            u = t()
                        } finally {
                            i.current = f
                        }
                        return u
                    }
                });
            t.exports = i
        }, {
            113: 113,
            150: 150,
            27: 27
        }],
        39: [function (n, t) {
            "use strict";
            t.exports = {
                current: null
            }
        }, {}],
        40: [function (n, t) {
            "use strict";

            function i(n) {
                return r.createFactory(n)
            }
            var r = n(55),
                u = (n(56), n(140)),
                f = u({
                    a: "a",
                    abbr: "abbr",
                    address: "address",
                    area: "area",
                    article: "article",
                    aside: "aside",
                    audio: "audio",
                    b: "b",
                    base: "base",
                    bdi: "bdi",
                    bdo: "bdo",
                    big: "big",
                    blockquote: "blockquote",
                    body: "body",
                    br: "br",
                    button: "button",
                    canvas: "canvas",
                    caption: "caption",
                    cite: "cite",
                    code: "code",
                    col: "col",
                    colgroup: "colgroup",
                    data: "data",
                    datalist: "datalist",
                    dd: "dd",
                    del: "del",
                    details: "details",
                    dfn: "dfn",
                    dialog: "dialog",
                    div: "div",
                    dl: "dl",
                    dt: "dt",
                    em: "em",
                    embed: "embed",
                    fieldset: "fieldset",
                    figcaption: "figcaption",
                    figure: "figure",
                    footer: "footer",
                    form: "form",
                    h1: "h1",
                    h2: "h2",
                    h3: "h3",
                    h4: "h4",
                    h5: "h5",
                    h6: "h6",
                    head: "head",
                    header: "header",
                    hr: "hr",
                    html: "html",
                    i: "i",
                    iframe: "iframe",
                    img: "img",
                    input: "input",
                    ins: "ins",
                    kbd: "kbd",
                    keygen: "keygen",
                    label: "label",
                    legend: "legend",
                    li: "li",
                    link: "link",
                    main: "main",
                    map: "map",
                    mark: "mark",
                    menu: "menu",
                    menuitem: "menuitem",
                    meta: "meta",
                    meter: "meter",
                    nav: "nav",
                    noscript: "noscript",
                    object: "object",
                    ol: "ol",
                    optgroup: "optgroup",
                    option: "option",
                    output: "output",
                    p: "p",
                    param: "param",
                    picture: "picture",
                    pre: "pre",
                    progress: "progress",
                    q: "q",
                    rp: "rp",
                    rt: "rt",
                    ruby: "ruby",
                    s: "s",
                    samp: "samp",
                    script: "script",
                    section: "section",
                    select: "select",
                    small: "small",
                    source: "source",
                    span: "span",
                    strong: "strong",
                    style: "style",
                    sub: "sub",
                    summary: "summary",
                    sup: "sup",
                    table: "table",
                    tbody: "tbody",
                    td: "td",
                    textarea: "textarea",
                    tfoot: "tfoot",
                    th: "th",
                    thead: "thead",
                    time: "time",
                    title: "title",
                    tr: "tr",
                    track: "track",
                    u: "u",
                    ul: "ul",
                    "var": "var",
                    video: "video",
                    wbr: "wbr",
                    circle: "circle",
                    defs: "defs",
                    ellipse: "ellipse",
                    g: "g",
                    line: "line",
                    linearGradient: "linearGradient",
                    mask: "mask",
                    path: "path",
                    pattern: "pattern",
                    polygon: "polygon",
                    polyline: "polyline",
                    radialGradient: "radialGradient",
                    rect: "rect",
                    stop: "stop",
                    svg: "svg",
                    text: "text",
                    tspan: "tspan"
                }, i);
            t.exports = f
        }, {
            140: 140,
            55: 55,
            56: 56
        }],
        41: [function (n, t) {
            "use strict";
            var i = n(2),
                r = n(29),
                u = n(33),
                f = n(55),
                e = n(138),
                o = f.createFactory("button"),
                s = e({
                    onClick: !0,
                    onDoubleClick: !0,
                    onMouseDown: !0,
                    onMouseMove: !0,
                    onMouseUp: !0,
                    onClickCapture: !0,
                    onDoubleClickCapture: !0,
                    onMouseDownCapture: !0,
                    onMouseMoveCapture: !0,
                    onMouseUpCapture: !0
                }),
                h = u.createClass({
                    displayName: "ReactDOMButton",
                    tagName: "BUTTON",
                    mixins: [i, r],
                    render: function () {
                        var t = {},
                            n;
                        for (n in this.props) !this.props.hasOwnProperty(n) || this.props.disabled && s[n] || (t[n] = this.props[n]);
                        return o(t, this.props.children)
                    }
                });
            t.exports = h
        }, {
            138: 138,
            2: 2,
            29: 29,
            33: 33,
            55: 55
        }],
        42: [function (n, t) {
            "use strict";

            function l(n) {
                n && (null != n.dangerouslySetInnerHTML && (e(null == n.children), e(null != n.dangerouslySetInnerHTML.__html)), e(null == n.style || "object" == typeof n.style))
            }

            function a(n, t, i, r) {
                var u = k.findReactContainerForID(n),
                    f;
                u && (f = u.nodeType === ut ? u.ownerDocument : u, rt(t, f));
                r.getPutListenerQueue().enqueuePutListener(n, t, i)
            }

            function p(n) {
                ot.call(y, n) || (e(et.test(n)), y[n] = !0)
            }

            function i(n) {
                p(n);
                this._tag = n;
                this._renderedChildren = null;
                this._previousStyleCopy = null;
                this._rootNodeID = null
            }
            var w = n(5),
                u = n(10),
                v = n(11),
                f = n(30),
                b = n(35),
                k = n(68),
                d = n(69),
                g = n(73),
                s = n(27),
                nt = n(114),
                e = n(133),
                tt = (n(134), n(139)),
                it = (n(150), f.deleteListener),
                rt = f.listenTo,
                h = f.registrationNameModules,
                c = {
                    string: !0,
                    number: !0
                },
                o = tt({
                    style: null
                }),
                ut = 1,
                r = null,
                ft = {
                    area: !0,
                    base: !0,
                    br: !0,
                    col: !0,
                    embed: !0,
                    hr: !0,
                    img: !0,
                    input: !0,
                    keygen: !0,
                    link: !0,
                    meta: !0,
                    param: !0,
                    source: !0,
                    track: !0,
                    wbr: !0
                },
                et = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
                y = {},
                ot = {}.hasOwnProperty;
            i.displayName = "ReactDOMComponent";
            i.Mixin = {
                construct: function (n) {
                    this._currentElement = n
                },
                mountComponent: function (n, t, i) {
                    this._rootNodeID = n;
                    l(this._currentElement.props);
                    var r = ft[this._tag] ? "" : "<\/" + this._tag + ">";
                    return this._createOpenTagMarkupAndPutListeners(t) + this._createContentMarkup(t, i) + r
                },
                _createOpenTagMarkupAndPutListeners: function (n) {
                    var r = this._currentElement.props,
                        u = "<" + this._tag,
                        i, t, f, e;
                    for (i in r) r.hasOwnProperty(i) && (t = r[i], null != t && (h.hasOwnProperty(i) ? a(this._rootNodeID, i, t, n) : (i === o && (t && (t = this._previousStyleCopy = s({}, r.style)), t = w.createMarkupForStyles(t)), f = v.createMarkupForProperty(i, t), f && (u += " " + f))));
                    return n.renderToStaticMarkup ? u + ">" : (e = v.createMarkupForID(this._rootNodeID), u + " " + e + ">")
                },
                _createContentMarkup: function (n, t) {
                    var i = "",
                        r, u, f, e, o;
                    if (("listing" === this._tag || "pre" === this._tag || "textarea" === this._tag) && (i = "\n"), r = this._currentElement.props, u = r.dangerouslySetInnerHTML, null != u) {
                        if (null != u.__html) return i + u.__html
                    } else {
                        if (f = c[typeof r.children] ? r.children : null, e = null != f ? null : r.children, null != f) return i + nt(f);
                        if (null != e) return o = this.mountChildren(e, n, t), i + o.join("")
                    }
                    return i
                },
                receiveComponent: function (n, t, i) {
                    var r = this._currentElement;
                    this._currentElement = n;
                    this.updateComponent(t, r, n, i)
                },
                updateComponent: function (n, t, i, r) {
                    l(this._currentElement.props);
                    this._updateDOMProperties(t.props, n);
                    this._updateDOMChildren(t.props, n, r)
                },
                _updateDOMProperties: function (n, t) {
                    var i, e, c, v = this._currentElement.props,
                        y, f, l;
                    for (i in n)
                        if (!v.hasOwnProperty(i) && n.hasOwnProperty(i))
                            if (i === o) {
                                y = this._previousStyleCopy;
                                for (e in y) y.hasOwnProperty(e) && (c = c || {}, c[e] = "");
                                this._previousStyleCopy = null
                            } else h.hasOwnProperty(i) ? it(this._rootNodeID, i) : (u.isStandardName[i] || u.isCustomAttribute(i)) && r.deletePropertyByID(this._rootNodeID, i);
                    for (i in v)
                        if (f = v[i], l = i === o ? this._previousStyleCopy : n[i], v.hasOwnProperty(i) && f !== l)
                            if (i === o)
                                if (f && (f = this._previousStyleCopy = s({}, f)), l) {
                                    for (e in l) !l.hasOwnProperty(e) || f && f.hasOwnProperty(e) || (c = c || {}, c[e] = "");
                                    for (e in f) f.hasOwnProperty(e) && l[e] !== f[e] && (c = c || {}, c[e] = f[e])
                                } else c = f;
                    else h.hasOwnProperty(i) ? a(this._rootNodeID, i, f, t) : (u.isStandardName[i] || u.isCustomAttribute(i)) && r.updatePropertyByID(this._rootNodeID, i, f);
                    c && r.updateStylesByID(this._rootNodeID, c)
                },
                _updateDOMChildren: function (n, t, i) {
                    var u = this._currentElement.props,
                        o = c[typeof n.children] ? n.children : null,
                        f = c[typeof u.children] ? u.children : null,
                        h = n.dangerouslySetInnerHTML && n.dangerouslySetInnerHTML.__html,
                        e = u.dangerouslySetInnerHTML && u.dangerouslySetInnerHTML.__html,
                        l = null != o ? null : n.children,
                        s = null != f ? null : u.children,
                        a = null != o || null != h,
                        v = null != f || null != e;
                    null != l && null == s ? this.updateChildren(null, t, i) : a && !v && this.updateTextContent("");
                    null != f ? o !== f && this.updateTextContent("" + f) : null != e ? h !== e && r.updateInnerHTMLByID(this._rootNodeID, e) : null != s && this.updateChildren(s, t, i)
                },
                unmountComponent: function () {
                    this.unmountChildren();
                    f.deleteAllListeners(this._rootNodeID);
                    b.unmountIDFromEnvironment(this._rootNodeID);
                    this._rootNodeID = null
                }
            };
            g.measureMethods(i, "ReactDOMComponent", {
                mountComponent: "mountComponent",
                updateComponent: "updateComponent"
            });
            s(i.prototype, i.Mixin, d.Mixin);
            i.injection = {
                injectIDOperations: function (n) {
                    i.BackendIDOperations = r = n
                }
            };
            t.exports = i
        }, {
            10: 10,
            11: 11,
            114: 114,
            133: 133,
            134: 134,
            139: 139,
            150: 150,
            27: 27,
            30: 30,
            35: 35,
            5: 5,
            68: 68,
            69: 69,
            73: 73
        }],
        43: [function (n, t) {
            "use strict";
            var i = n(15),
                r = n(25),
                u = n(29),
                f = n(33),
                e = n(55),
                o = e.createFactory("form"),
                s = f.createClass({
                    displayName: "ReactDOMForm",
                    tagName: "FORM",
                    mixins: [u, r],
                    render: function () {
                        return o(this.props)
                    },
                    componentDidMount: function () {
                        this.trapBubbledEvent(i.topLevelTypes.topReset, "reset");
                        this.trapBubbledEvent(i.topLevelTypes.topSubmit, "submit")
                    }
                });
            t.exports = s
        }, {
            15: 15,
            25: 25,
            29: 29,
            33: 33,
            55: 55
        }],
        44: [function (n, t) {
            "use strict";
            var s = n(5),
                r = n(9),
                u = n(11),
                i = n(68),
                h = n(73),
                f = n(133),
                c = n(144),
                e = {
                    dangerouslySetInnerHTML: "`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.",
                    style: "`style` must be set using `updateStylesByID()`."
                },
                o = {
                    updatePropertyByID: function (n, t, r) {
                        var o = i.getNode(n);
                        f(!e.hasOwnProperty(t));
                        null != r ? u.setValueForProperty(o, t, r) : u.deleteValueForProperty(o, t)
                    },
                    deletePropertyByID: function (n, t, r) {
                        var o = i.getNode(n);
                        f(!e.hasOwnProperty(t));
                        u.deleteValueForProperty(o, t, r)
                    },
                    updateStylesByID: function (n, t) {
                        var r = i.getNode(n);
                        s.setValueForStyles(r, t)
                    },
                    updateInnerHTMLByID: function (n, t) {
                        var r = i.getNode(n);
                        c(r, t)
                    },
                    updateTextContentByID: function (n, t) {
                        var u = i.getNode(n);
                        r.updateTextContent(u, t)
                    },
                    dangerouslyReplaceNodeWithMarkupByID: function (n, t) {
                        var u = i.getNode(n);
                        r.dangerouslyReplaceNodeWithMarkup(u, t)
                    },
                    dangerouslyProcessChildrenUpdates: function (n, t) {
                        for (var u = 0; u < n.length; u++) n[u].parentNode = i.getNode(n[u].parentID);
                        r.processUpdates(n, t)
                    }
                };
            h.measureMethods(o, "ReactDOMIDOperations", {
                updatePropertyByID: "updatePropertyByID",
                deletePropertyByID: "deletePropertyByID",
                updateStylesByID: "updateStylesByID",
                updateInnerHTMLByID: "updateInnerHTMLByID",
                updateTextContentByID: "updateTextContentByID",
                dangerouslyReplaceNodeWithMarkupByID: "dangerouslyReplaceNodeWithMarkupByID",
                dangerouslyProcessChildrenUpdates: "dangerouslyProcessChildrenUpdates"
            });
            t.exports = o
        }, {
            11: 11,
            133: 133,
            144: 144,
            5: 5,
            68: 68,
            73: 73,
            9: 9
        }],
        45: [function (n, t) {
            "use strict";
            var i = n(15),
                r = n(25),
                u = n(29),
                f = n(33),
                e = n(55),
                o = e.createFactory("iframe"),
                s = f.createClass({
                    displayName: "ReactDOMIframe",
                    tagName: "IFRAME",
                    mixins: [u, r],
                    render: function () {
                        return o(this.props)
                    },
                    componentDidMount: function () {
                        this.trapBubbledEvent(i.topLevelTypes.topLoad, "load")
                    }
                });
            t.exports = s
        }, {
            15: 15,
            25: 25,
            29: 29,
            33: 33,
            55: 55
        }],
        46: [function (n, t) {
            "use strict";
            var i = n(15),
                r = n(25),
                u = n(29),
                f = n(33),
                e = n(55),
                o = e.createFactory("img"),
                s = f.createClass({
                    displayName: "ReactDOMImg",
                    tagName: "IMG",
                    mixins: [u, r],
                    render: function () {
                        return o(this.props)
                    },
                    componentDidMount: function () {
                        this.trapBubbledEvent(i.topLevelTypes.topLoad, "load");
                        this.trapBubbledEvent(i.topLevelTypes.topError, "error")
                    }
                });
            t.exports = s
        }, {
            15: 15,
            25: 25,
            29: 29,
            33: 33,
            55: 55
        }],
        47: [function (n, t) {
            "use strict";

            function f() {
                this.isMounted() && this.forceUpdate()
            }
            var h = n(2),
                e = n(11),
                i = n(24),
                c = n(29),
                l = n(33),
                a = n(55),
                r = n(68),
                o = n(85),
                v = n(27),
                s = n(133),
                y = a.createFactory("input"),
                u = {},
                p = l.createClass({
                    displayName: "ReactDOMInput",
                    tagName: "INPUT",
                    mixins: [h, i.Mixin, c],
                    getInitialState: function () {
                        var n = this.props.defaultValue;
                        return {
                            initialChecked: this.props.defaultChecked || !1,
                            initialValue: null != n ? n : null
                        }
                    },
                    render: function () {
                        var n = v({}, this.props),
                            t, r;
                        return n.defaultChecked = null, n.defaultValue = null, t = i.getValue(this), n.value = null != t ? t : this.state.initialValue, r = i.getChecked(this), n.checked = null != r ? r : this.state.initialChecked, n.onChange = this._handleChange, y(n, this.props.children)
                    },
                    componentDidMount: function () {
                        var n = r.getID(this.getDOMNode());
                        u[n] = this
                    },
                    componentWillUnmount: function () {
                        var n = this.getDOMNode(),
                            t = r.getID(n);
                        delete u[t]
                    },
                    componentDidUpdate: function () {
                        var t = this.getDOMNode(),
                            n;
                        null != this.props.checked && e.setValueForProperty(t, "checked", this.props.checked || !1);
                        n = i.getValue(this);
                        null != n && e.setValueForProperty(t, "value", "" + n)
                    },
                    _handleChange: function (n) {
                        var y, p = i.getOnChange(this),
                            c, e, t, h, a, v;
                        if (p && (y = p.call(this, n)), o.asap(f, this), c = this.props.name, "radio" === this.props.type && null != c) {
                            for (e = this.getDOMNode(), t = e; t.parentNode;) t = t.parentNode;
                            for (var w = t.querySelectorAll("input[name=" + JSON.stringify("" + c) + '][type="radio"]'), l = 0, b = w.length; b > l; l++) h = w[l], h !== e && h.form === e.form && (a = r.getID(h), s(a), v = u[a], s(v), o.asap(f, v))
                        }
                        return y
                    }
                });
            t.exports = p
        }, {
            11: 11,
            133: 133,
            2: 2,
            24: 24,
            27: 27,
            29: 29,
            33: 33,
            55: 55,
            68: 68,
            85: 85
        }],
        48: [function (n, t) {
            "use strict";
            var i = n(29),
                r = n(33),
                u = n(55),
                f = (n(150), u.createFactory("option")),
                e = r.createClass({
                    displayName: "ReactDOMOption",
                    tagName: "OPTION",
                    mixins: [i],
                    componentWillMount: function () {},
                    render: function () {
                        return f(this.props, this.props.children)
                    }
                });
            t.exports = e
        }, {
            150: 150,
            29: 29,
            33: 33,
            55: 55
        }],
        49: [function (n, t) {
            "use strict";

            function f() {
                if (this._pendingUpdate) {
                    this._pendingUpdate = !1;
                    var n = r.getValue(this);
                    null != n && this.isMounted() && i(this, n)
                }
            }

            function u(n, t) {
                if (null == n[t]) return null;
                if (n.multiple) {
                    if (!Array.isArray(n[t])) return new Error("The `" + t + "` prop supplied to <select> must be an array if `multiple` is true.")
                } else if (Array.isArray(n[t])) return new Error("The `" + t + "` prop supplied to <select> must be a scalar value if `multiple` is false.")
            }

            function i(n, t) {
                var f, i, u, r = n.getDOMNode().options,
                    e;
                if (n.props.multiple) {
                    for (f = {}, i = 0, u = t.length; u > i; i++) f["" + t[i]] = !0;
                    for (i = 0, u = r.length; u > i; i++) e = f.hasOwnProperty(r[i].value), r[i].selected !== e && (r[i].selected = e)
                } else {
                    for (f = "" + t, i = 0, u = r.length; u > i; i++)
                        if (r[i].value === f) return void(r[i].selected = !0);
                    r.length && (r[0].selected = !0)
                }
            }
            var e = n(2),
                r = n(24),
                o = n(29),
                s = n(33),
                h = n(55),
                c = n(85),
                l = n(27),
                a = h.createFactory("select"),
                v = s.createClass({
                    displayName: "ReactDOMSelect",
                    tagName: "SELECT",
                    mixins: [e, r.Mixin, o],
                    propTypes: {
                        defaultValue: u,
                        value: u
                    },
                    render: function () {
                        var n = l({}, this.props);
                        return n.onChange = this._handleChange, n.value = null, a(n, this.props.children)
                    },
                    componentWillMount: function () {
                        this._pendingUpdate = !1
                    },
                    componentDidMount: function () {
                        var n = r.getValue(this);
                        null != n ? i(this, n) : null != this.props.defaultValue && i(this, this.props.defaultValue)
                    },
                    componentDidUpdate: function (n) {
                        var t = r.getValue(this);
                        null != t ? (this._pendingUpdate = !1, i(this, t)) : !n.multiple != !this.props.multiple && (null != this.props.defaultValue ? i(this, this.props.defaultValue) : i(this, this.props.multiple ? [] : ""))
                    },
                    _handleChange: function (n) {
                        var t, i = r.getOnChange(this);
                        return i && (t = i.call(this, n)), this._pendingUpdate = !0, c.asap(f, this), t
                    }
                });
            t.exports = v
        }, {
            2: 2,
            24: 24,
            27: 27,
            29: 29,
            33: 33,
            55: 55,
            85: 85
        }],
        50: [function (n, t) {
            "use strict";

            function i(n, t, i, r) {
                return n === i && t === r
            }

            function f(n) {
                var f = document.selection,
                    t = f.createRange(),
                    e = t.text.length,
                    i = t.duplicate(),
                    r, u;
                return i.moveToElementText(n), i.setEndPoint("EndToStart", t), r = i.text.length, u = r + e, {
                    start: r,
                    end: u
                }
            }

            function e(n) {
                var t = window.getSelection && window.getSelection(),
                    o;
                if (!t || 0 === t.rangeCount) return null;
                var h = t.anchorNode,
                    c = t.anchorOffset,
                    l = t.focusNode,
                    a = t.focusOffset,
                    u = t.getRangeAt(0),
                    v = i(t.anchorNode, t.anchorOffset, t.focusNode, t.focusOffset),
                    y = v ? 0 : u.toString().length,
                    r = u.cloneRange();
                r.selectNodeContents(n);
                r.setEnd(u.startContainer, u.startOffset);
                var p = i(r.startContainer, r.startOffset, r.endContainer, r.endOffset),
                    f = p ? 0 : r.toString().length,
                    s = f + y,
                    e = document.createRange();
                return e.setStart(h, c), e.setEnd(l, a), o = e.collapsed, {
                    start: o ? s : f,
                    end: o ? f : s
                }
            }

            function o(n, t) {
                var i, u, r = document.selection.createRange().duplicate();
                "undefined" == typeof t.end ? (i = t.start, u = i) : t.start > t.end ? (i = t.end, u = t.start) : (i = t.start, u = t.end);
                r.moveToElementText(n);
                r.moveStart("character", i);
                r.setEndPoint("EndToStart", r);
                r.moveEnd("character", u - i);
                r.select()
            }

            function s(n, t) {
                var l, s, u, o;
                if (window.getSelection) {
                    var f = window.getSelection(),
                        h = n[c()].length,
                        i = Math.min(t.start, h),
                        e = "undefined" == typeof t.end ? i : Math.min(t.end, h);
                    !f.extend && i > e && (l = e, e = i, i = l);
                    s = r(n, i);
                    u = r(n, e);
                    s && u && (o = document.createRange(), o.setStart(s.node, s.offset), f.removeAllRanges(), i > e ? (f.addRange(o), f.extend(u.node, u.offset)) : (o.setEnd(u.node, u.offset), f.addRange(o)))
                }
            }
            var h = n(21),
                r = n(126),
                c = n(128),
                u = h.canUseDOM && "selection" in document && !("getSelection" in window),
                l = {
                    getOffsets: u ? f : e,
                    setOffsets: u ? o : s
                };
            t.exports = l
        }, {
            126: 126,
            128: 128,
            21: 21
        }],
        51: [function (n, t) {
            "use strict";
            var r = n(11),
                u = n(35),
                f = n(42),
                e = n(27),
                o = n(114),
                i = function () {};
            e(i.prototype, {
                construct: function (n) {
                    this._currentElement = n;
                    this._stringText = "" + n;
                    this._rootNodeID = null;
                    this._mountIndex = 0
                },
                mountComponent: function (n, t) {
                    this._rootNodeID = n;
                    var i = o(this._stringText);
                    return t.renderToStaticMarkup ? i : "<span " + r.createMarkupForID(n) + ">" + i + "<\/span>"
                },
                receiveComponent: function (n) {
                    if (n !== this._currentElement) {
                        this._currentElement = n;
                        var t = "" + n;
                        t !== this._stringText && (this._stringText = t, f.BackendIDOperations.updateTextContentByID(this._rootNodeID, t))
                    }
                },
                unmountComponent: function () {
                    u.unmountIDFromEnvironment(this._rootNodeID)
                }
            });
            t.exports = i
        }, {
            11: 11,
            114: 114,
            27: 27,
            35: 35,
            42: 42
        }],
        52: [function (n, t) {
            "use strict";

            function u() {
                this.isMounted() && this.forceUpdate()
            }
            var f = n(2),
                e = n(11),
                i = n(24),
                o = n(29),
                s = n(33),
                h = n(55),
                c = n(85),
                l = n(27),
                r = n(133),
                a = (n(150), h.createFactory("textarea")),
                v = s.createClass({
                    displayName: "ReactDOMTextarea",
                    tagName: "TEXTAREA",
                    mixins: [f, i.Mixin, o],
                    getInitialState: function () {
                        var t = this.props.defaultValue,
                            n = this.props.children,
                            u;
                        return null != n && (r(null == t), Array.isArray(n) && (r(n.length <= 1), n = n[0]), t = "" + n), null == t && (t = ""), u = i.getValue(this), {
                            initialValue: "" + (null != u ? u : t)
                        }
                    },
                    render: function () {
                        var n = l({}, this.props);
                        return r(null == n.dangerouslySetInnerHTML), n.defaultValue = null, n.value = null, n.onChange = this._handleChange, a(n, this.state.initialValue)
                    },
                    componentDidUpdate: function () {
                        var n = i.getValue(this),
                            t;
                        null != n && (t = this.getDOMNode(), e.setValueForProperty(t, "value", "" + n))
                    },
                    _handleChange: function (n) {
                        var t, r = i.getOnChange(this);
                        return r && (t = r.call(this, n)), c.asap(u, this), t
                    }
                });
            t.exports = v
        }, {
            11: 11,
            133: 133,
            150: 150,
            2: 2,
            24: 24,
            27: 27,
            29: 29,
            33: 33,
            55: 55,
            85: 85
        }],
        53: [function (n, t) {
            "use strict";

            function r() {
                this.reinitializeTransaction()
            }
            var u = n(85),
                o = n(101),
                s = n(27),
                f = n(112),
                h = {
                    initialize: f,
                    close: function () {
                        i.isBatchingUpdates = !1
                    }
                },
                c = {
                    initialize: f,
                    close: u.flushBatchedUpdates.bind(u)
                },
                l = [c, h],
                e, i;
            s(r.prototype, o.Mixin, {
                getTransactionWrappers: function () {
                    return l
                }
            });
            e = new r;
            i = {
                isBatchingUpdates: !1,
                batchedUpdates: function (n, t, r, u, f) {
                    var o = i.isBatchingUpdates;
                    i.isBatchingUpdates = !0;
                    o ? n(t, r, u, f) : e.perform(n, null, t, r, u, f)
                }
            };
            t.exports = i
        }, {
            101: 101,
            112: 112,
            27: 27,
            85: 85
        }],
        54: [function (n, t) {
            "use strict";

            function u(n) {
                return p.createClass({
                    tagName: n.toUpperCase(),
                    render: function () {
                        return new st(n, null, null, null, null, this.props)
                    }
                })
            }

            function f() {
                i.EventEmitter.injectReactEventListener(ht);
                i.EventPluginHub.injectEventPluginOrder(h);
                i.EventPluginHub.injectInstanceHandle(ct);
                i.EventPluginHub.injectMount(lt);
                i.EventPluginHub.injectEventPluginsByName({
                    SimpleEventPlugin: pt,
                    EnterLeaveEventPlugin: c,
                    ChangeEventPlugin: o,
                    MobileSafariClickEventPlugin: v,
                    SelectEventPlugin: vt,
                    BeforeInputEventPlugin: e
                });
                i.NativeComponent.injectGenericComponentClass(k);
                i.NativeComponent.injectTextComponentClass(ot);
                i.NativeComponent.injectAutoWrapper(u);
                i.Class.injectMixin(y);
                i.NativeComponent.injectComponentClasses({
                    button: d,
                    form: g,
                    iframe: it,
                    img: nt,
                    input: rt,
                    option: ut,
                    select: ft,
                    textarea: et,
                    html: r("html"),
                    head: r("head"),
                    body: r("body")
                });
                i.DOMProperty.injectDOMPropertyConfig(a);
                i.DOMProperty.injectDOMPropertyConfig(wt);
                i.EmptyComponent.injectEmptyComponent("noscript");
                i.Updates.injectReconcileTransaction(at);
                i.Updates.injectBatchingStrategy(b);
                i.RootIndex.injectCreateReactRootIndex(l.canUseDOM ? s.createReactRootIndex : yt.createReactRootIndex);
                i.Component.injectEnvironment(w);
                i.DOMComponent.injectIDOperations(tt)
            }
            var e = n(3),
                o = n(7),
                s = n(8),
                h = n(13),
                c = n(14),
                l = n(21),
                a = n(23),
                v = n(26),
                y = n(29),
                p = n(33),
                w = n(35),
                b = n(53),
                k = n(42),
                d = n(41),
                g = n(43),
                nt = n(46),
                tt = n(44),
                it = n(45),
                rt = n(47),
                ut = n(48),
                ft = n(49),
                et = n(52),
                ot = n(51),
                st = n(55),
                ht = n(60),
                i = n(62),
                ct = n(64),
                lt = n(68),
                at = n(78),
                vt = n(87),
                yt = n(88),
                pt = n(89),
                wt = n(86),
                r = n(109);
            t.exports = {
                inject: f
            }
        }, {
            109: 109,
            13: 13,
            14: 14,
            21: 21,
            23: 23,
            26: 26,
            29: 29,
            3: 3,
            33: 33,
            35: 35,
            41: 41,
            42: 42,
            43: 43,
            44: 44,
            45: 45,
            46: 46,
            47: 47,
            48: 48,
            49: 49,
            51: 51,
            52: 52,
            53: 53,
            55: 55,
            60: 60,
            62: 62,
            64: 64,
            68: 68,
            7: 7,
            78: 78,
            8: 8,
            86: 86,
            87: 87,
            88: 88,
            89: 89
        }],
        55: [function (n, t) {
            "use strict";
            var f = n(38),
                r = n(39),
                e = n(27),
                u = (n(150), {
                    key: !0,
                    ref: !0
                }),
                i = function (n, t, i, r, u, f) {
                    this.type = n;
                    this.key = t;
                    this.ref = i;
                    this._owner = r;
                    this._context = u;
                    this.props = f
                };
            i.prototype = {
                _isReactElement: !0
            };
            i.createElement = function (n, t, e) {
                var o, s = {},
                    v = null,
                    y = null,
                    h, l, c, a;
                if (null != t) {
                    y = void 0 === t.ref ? null : t.ref;
                    v = void 0 === t.key ? null : "" + t.key;
                    for (o in t) t.hasOwnProperty(o) && !u.hasOwnProperty(o) && (s[o] = t[o])
                }
                if (h = arguments.length - 2, 1 === h) s.children = e;
                else if (h > 1) {
                    for (l = Array(h), c = 0; h > c; c++) l[c] = arguments[c + 2];
                    s.children = l
                }
                if (n && n.defaultProps) {
                    a = n.defaultProps;
                    for (o in a) "undefined" == typeof s[o] && (s[o] = a[o])
                }
                return new i(n, v, y, r.current, f.current, s)
            };
            i.createFactory = function (n) {
                var t = i.createElement.bind(null, n);
                return t.type = n, t
            };
            i.cloneAndReplaceProps = function (n, t) {
                return new i(n.type, n.key, n.ref, n._owner, n._context, t)
            };
            i.cloneElement = function (n, t, f) {
                var o, c = e({}, n.props),
                    a = n.key,
                    v = n.ref,
                    y = n._owner,
                    s, l, h;
                if (null != t) {
                    void 0 !== t.ref && (v = t.ref, y = r.current);
                    void 0 !== t.key && (a = "" + t.key);
                    for (o in t) t.hasOwnProperty(o) && !u.hasOwnProperty(o) && (c[o] = t[o])
                }
                if (s = arguments.length - 2, 1 === s) c.children = f;
                else if (s > 1) {
                    for (l = Array(s), h = 0; s > h; h++) l[h] = arguments[h + 2];
                    c.children = l
                }
                return new i(n.type, a, v, y, n._context, c)
            };
            i.isValidElement = function (n) {
                return !(!n || !n._isReactElement)
            };
            t.exports = i
        }, {
            150: 150,
            27: 27,
            38: 38,
            39: 39
        }],
        56: [function (n, t) {
            "use strict";

            function v() {
                if (r.current) {
                    var n = r.current.getName();
                    if (n) return " Check the render method of `" + n + "`."
                }
                return ""
            }

            function u(n) {
                var i = n && n.getPublicInstance(),
                    t;
                if (i) return t = i.constructor, t ? t.displayName || t.name || void 0 : void 0
            }

            function y() {
                var n = r.current;
                return n && u(n) || void 0
            }

            function f(n, t) {
                n._store.validated || null != n.key || (n._store.validated = !0, e('Each child in an array or iterator should have a unique "key" prop.', n, t))
            }

            function p(n, t, i) {
                ut.test(n) && e("Child objects should have non-numeric keys so ordering is preserved.", t, i)
            }

            function e(n, t, i) {
                var c = y(),
                    l = "string" == typeof i ? i : i.displayName || i.name,
                    f = c || l,
                    e = h[n] || (h[n] = {}),
                    o, s;
                e.hasOwnProperty(f) || (e[f] = !0, o = "", t && t._owner && t._owner !== r.current && (s = u(t._owner), o = " It was passed a child from " + s + "."))
            }

            function o(n, t) {
                var r, s, u, h, c, e, o;
                if (Array.isArray(n))
                    for (r = 0; r < n.length; r++) s = n[r], i.isValidElement(s) && f(s, t);
                else if (i.isValidElement(n)) n._store.validated = !0;
                else if (n)
                    if (u = it(n), u) {
                        if (u !== n.entries)
                            for (c = u.call(n); !(h = c.next()).done;) i.isValidElement(h.value) && f(h.value, t)
                    } else if ("object" == typeof n) {
                    e = g.extractIfFragment(n);
                    for (o in e) e.hasOwnProperty(o) && p(o, e[o], t)
                }
            }

            function w(n, t, i, r) {
                var u, f;
                for (u in t)
                    if (t.hasOwnProperty(u)) {
                        try {
                            rt("function" == typeof t[u]);
                            f = t[u](i, u, n, r)
                        } catch (e) {
                            f = e
                        }
                        f instanceof Error && !(f.message in c) && (c[f.message] = !0, v(this))
                    }
            }

            function b(n, t) {
                var i = t.type,
                    r = "string" == typeof i ? i : i.displayName,
                    u = t._owner ? t._owner.getPublicInstance().constructor.displayName : null,
                    f = n + "|" + r + "|" + u,
                    e, o;
                l.hasOwnProperty(f) || (l[f] = !0, e = "", r && (e = " <" + r + " />"), o = "", u && (o = " The element was created by " + u + "."))
            }

            function k(n, t) {
                return n !== n ? t !== t : 0 === n && 0 === t ? 1 / n == 1 / t : n === t
            }

            function d(n) {
                var r, i, t;
                if (n._store) {
                    r = n._store.originalProps;
                    i = n.props;
                    for (t in i) i.hasOwnProperty(t) && (r.hasOwnProperty(t) && k(r[t], i[t]) || (b(t, n), r[t] = i[t]))
                }
            }

            function s(n) {
                if (null != n.type) {
                    var t = tt.getComponentClassForElement(n),
                        i = t.displayName || t.name;
                    t.propTypes && w(i, t.propTypes, n.props, nt.prop);
                    "function" == typeof t.getDefaultProps
                }
            }
            var i = n(55),
                g = n(61),
                nt = n(75),
                r = (n(74), n(39)),
                tt = n(71),
                it = n(124),
                rt = n(133),
                h = (n(150), {}),
                c = {},
                ut = /^\d+$/,
                l = {},
                a = {
                    checkAndWarnForMutatedProps: d,
                    createElement: function (n) {
                        var t = i.createElement.apply(this, arguments),
                            r;
                        if (null == t) return t;
                        for (r = 2; r < arguments.length; r++) o(arguments[r], n);
                        return s(t), t
                    },
                    createFactory: function (n) {
                        var t = a.createElement.bind(null, n);
                        return t.type = n, t
                    },
                    cloneElement: function () {
                        for (var n = i.cloneElement.apply(this, arguments), t = 2; t < arguments.length; t++) o(arguments[t], n.type);
                        return s(n), n
                    }
                };
            t.exports = a
        }, {
            124: 124,
            133: 133,
            150: 150,
            39: 39,
            55: 55,
            61: 61,
            71: 71,
            74: 74,
            75: 75
        }],
        57: [function (n, t) {
            "use strict";

            function h(n) {
                u[n] = !0
            }

            function c(n) {
                delete u[n]
            }

            function l(n) {
                return !!u[n]
            }
            var r, f = n(55),
                e = n(65),
                a = n(133),
                u = {},
                v = {
                    injectEmptyComponent: function (n) {
                        r = f.createFactory(n)
                    }
                },
                i = function () {},
                o, s;
            i.prototype.componentDidMount = function () {
                var n = e.get(this);
                n && h(n._rootNodeID)
            };
            i.prototype.componentWillUnmount = function () {
                var n = e.get(this);
                n && c(n._rootNodeID)
            };
            i.prototype.render = function () {
                return a(r), r()
            };
            o = f.createElement(i);
            s = {
                emptyElement: o,
                injection: v,
                isNullComponentID: l
            };
            t.exports = s
        }, {
            133: 133,
            55: 55,
            65: 65
        }],
        58: [function (n, t) {
            "use strict";
            var i = {
                guard: function (n) {
                    return n
                }
            };
            t.exports = i
        }, {}],
        59: [function (n, t) {
            "use strict";

            function r(n) {
                i.enqueueEvents(n);
                i.processEventQueue()
            }
            var i = n(17),
                u = {
                    handleTopLevel: function (n, t, u, f) {
                        var e = i.extractEvents(n, t, u, f);
                        r(e)
                    }
                };
            t.exports = u
        }, {
            17: 17
        }],
        60: [function (n, t) {
            "use strict";

            function o(n) {
                var t = r.getID(n),
                    i = l.getReactRootIDFromNodeID(t),
                    u = r.findReactContainerForID(i);
                return r.getFirstReactDOM(u)
            }

            function u(n, t) {
                this.topLevelType = n;
                this.nativeEvent = t;
                this.ancestors = []
            }

            function s(n) {
                for (var f, e, s, t = r.getFirstReactDOM(y(n.nativeEvent)) || window, u = t; u;) n.ancestors.push(u), u = o(u);
                for (f = 0, e = n.ancestors.length; e > f; f++) t = n.ancestors[f], s = r.getID(t) || "", i._handleTopLevel(n.topLevelType, t, s, n.nativeEvent)
            }

            function h(n) {
                var t = p(window);
                n(t)
            }
            var f = n(16),
                c = n(21),
                e = n(28),
                l = n(64),
                r = n(68),
                a = n(85),
                v = n(27),
                y = n(123),
                p = n(129),
                i;
            v(u.prototype, {
                destructor: function () {
                    this.topLevelType = null;
                    this.nativeEvent = null;
                    this.ancestors.length = 0
                }
            });
            e.addPoolingTo(u, e.twoArgumentPooler);
            i = {
                _enabled: !0,
                _handleTopLevel: null,
                WINDOW_HANDLE: c.canUseDOM ? window : null,
                setHandleTopLevel: function (n) {
                    i._handleTopLevel = n
                },
                setEnabled: function (n) {
                    i._enabled = !!n
                },
                isEnabled: function () {
                    return i._enabled
                },
                trapBubbledEvent: function (n, t, r) {
                    var u = r;
                    return u ? f.listen(u, t, i.dispatchEvent.bind(null, n)) : null
                },
                trapCapturedEvent: function (n, t, r) {
                    var u = r;
                    return u ? f.capture(u, t, i.dispatchEvent.bind(null, n)) : null
                },
                monitorScrollValue: function (n) {
                    var t = h.bind(null, n);
                    f.listen(window, "scroll", t)
                },
                dispatchEvent: function (n, t) {
                    if (i._enabled) {
                        var r = u.getPooled(n, t);
                        try {
                            a.batchedUpdates(s, r)
                        } finally {
                            u.release(r)
                        }
                    }
                }
            };
            t.exports = i
        }, {
            123: 123,
            129: 129,
            16: 16,
            21: 21,
            27: 27,
            28: 28,
            64: 64,
            68: 68,
            85: 85
        }],
        61: [function (n, t) {
            "use strict";
            var i = (n(55), n(150), {
                create: function (n) {
                    return n
                },
                extract: function (n) {
                    return n
                },
                extractIfFragment: function (n) {
                    return n
                }
            });
            t.exports = i
        }, {
            150: 150,
            55: 55
        }],
        62: [function (n, t) {
            "use strict";
            var i = n(10),
                r = n(17),
                u = n(36),
                f = n(33),
                e = n(57),
                o = n(30),
                s = n(71),
                h = n(42),
                c = n(73),
                l = n(81),
                a = n(85),
                v = {
                    Component: u.injection,
                    Class: f.injection,
                    DOMComponent: h.injection,
                    DOMProperty: i.injection,
                    EmptyComponent: e.injection,
                    EventPluginHub: r.injection,
                    EventEmitter: o.injection,
                    NativeComponent: s.injection,
                    Perf: c.injection,
                    RootIndex: l.injection,
                    Updates: a.injection
                };
            t.exports = v
        }, {
            10: 10,
            17: 17,
            30: 30,
            33: 33,
            36: 36,
            42: 42,
            57: 57,
            71: 71,
            73: 73,
            81: 81,
            85: 85
        }],
        63: [function (n, t) {
            "use strict";

            function f(n) {
                return e(document.documentElement, n)
            }
            var r = n(50),
                e = n(107),
                o = n(117),
                u = n(119),
                i = {
                    hasSelectionCapabilities: function (n) {
                        return n && ("INPUT" === n.nodeName && "text" === n.type || "TEXTAREA" === n.nodeName || "true" === n.contentEditable)
                    },
                    getSelectionInformation: function () {
                        var n = u();
                        return {
                            focusedElem: n,
                            selectionRange: i.hasSelectionCapabilities(n) ? i.getSelection(n) : null
                        }
                    },
                    restoreSelection: function (n) {
                        var r = u(),
                            t = n.focusedElem,
                            e = n.selectionRange;
                        r !== t && f(t) && (i.hasSelectionCapabilities(t) && i.setSelection(t, e), o(t))
                    },
                    getSelection: function (n) {
                        var t, i;
                        return "selectionStart" in n ? t = {
                            start: n.selectionStart,
                            end: n.selectionEnd
                        } : document.selection && "INPUT" === n.nodeName ? (i = document.selection.createRange(), i.parentElement() === n && (t = {
                            start: -i.moveStart("character", -n.value.length),
                            end: -i.moveEnd("character", -n.value.length)
                        })) : t = r.getOffsets(n), t || {
                            start: 0,
                            end: 0
                        }
                    },
                    setSelection: function (n, t) {
                        var u = t.start,
                            f = t.end,
                            i;
                        ("undefined" == typeof f && (f = u), "selectionStart" in n) ? (n.selectionStart = u, n.selectionEnd = Math.min(f, n.value.length)) : document.selection && "INPUT" === n.nodeName ? (i = n.createTextRange(), i.collapse(!0), i.moveStart("character", u), i.moveEnd("character", f - u), i.select()) : r.setOffsets(n, t)
                    }
                };
            t.exports = i
        }, {
            107: 107,
            117: 117,
            119: 119,
            50: 50
        }],
        64: [function (n, t) {
            "use strict";

            function c(n) {
                return i + n.toString(36)
            }

            function f(n, t) {
                return n.charAt(t) === i || t === n.length
            }

            function o(n) {
                return "" === n || n.charAt(0) === i && n.charAt(n.length - 1) !== i
            }

            function e(n, t) {
                return 0 === t.indexOf(n) && f(t, n.length)
            }

            function l(n) {
                return n ? n.substr(0, n.lastIndexOf(i)) : ""
            }

            function s(n, t) {
                if (r(o(n) && o(t)), r(e(n, t)), n === t) return n;
                for (var u = n.length + v, i = u; i < t.length && !f(t, i); i++);
                return t.substr(0, i)
            }

            function h(n, t) {
                var s = Math.min(n.length, t.length),
                    u, i, e;
                if (0 === s) return "";
                for (u = 0, i = 0; s >= i; i++)
                    if (f(n, i) && f(t, i)) u = i;
                    else if (n.charAt(i) !== t.charAt(i)) break;
                return e = n.substr(0, u), r(o(e)), e
            }

            function u(n, t, i, u, f, o) {
                var c, a;
                n = n || "";
                t = t || "";
                r(n !== t);
                c = e(t, n);
                r(c || e(n, t));
                for (var v = 0, p = c ? l : s, h = n;; h = p(h, t)) {
                    if (f && h === n || o && h === t || (a = i(h, c, u)), a === !1 || h === t) break;
                    r(v++ < y)
                }
            }
            var a = n(81),
                r = n(133),
                i = ".",
                v = i.length,
                y = 100,
                p = {
                    createReactRootID: function () {
                        return c(a.createReactRootIndex())
                    },
                    createReactID: function (n, t) {
                        return n + t
                    },
                    getReactRootIDFromNodeID: function (n) {
                        if (n && n.charAt(0) === i && n.length > 1) {
                            var t = n.indexOf(i, 1);
                            return t > -1 ? n.substr(0, t) : n
                        }
                        return null
                    },
                    traverseEnterLeave: function (n, t, i, r, f) {
                        var e = h(n, t);
                        e !== n && u(n, e, i, r, !1, !0);
                        e !== t && u(e, t, i, f, !0, !1)
                    },
                    traverseTwoPhase: function (n, t, i) {
                        n && (u("", n, t, i, !0, !1), u(n, "", t, i, !1, !0))
                    },
                    traverseAncestors: function (n, t, i) {
                        u("", n, t, i, !0, !1)
                    },
                    _getFirstCommonAncestorID: h,
                    _getNextDescendantID: s,
                    isAncestorIDOf: e,
                    SEPARATOR: i
                };
            t.exports = p
        }, {
            133: 133,
            81: 81
        }],
        65: [function (n, t) {
            "use strict";
            var i = {
                remove: function (n) {
                    n._reactInternalInstance = void 0
                },
                get: function (n) {
                    return n._reactInternalInstance
                },
                has: function (n) {
                    return void 0 !== n._reactInternalInstance
                },
                set: function (n, t) {
                    n._reactInternalInstance = t
                }
            };
            t.exports = i
        }, {}],
        66: [function (n, t) {
            "use strict";
            t.exports = {
                currentlyMountingInstance: null,
                currentlyUnmountingInstance: null
            }
        }, {}],
        67: [function (n, t) {
            "use strict";
            var r = n(104),
                i = {
                    CHECKSUM_ATTR_NAME: "data-react-checksum",
                    addChecksumToMarkup: function (n) {
                        var t = r(n);
                        return n.replace(">", " " + i.CHECKSUM_ATTR_NAME + '="' + t + '">')
                    },
                    canReuseMarkup: function (n, t) {
                        var u = t.getAttribute(i.CHECKSUM_ATTR_NAME),
                            f;
                        return u = u && parseInt(u, 10), f = r(n), f === u
                    }
                };
            t.exports = i
        }, {
            104: 104
        }],
        68: [function (n, t) {
            "use strict";

            function nt(n, t) {
                for (var r = Math.min(n.length, t.length), i = 0; r > i; i++)
                    if (n.charAt(i) !== t.charAt(i)) return i;
                return n.length === t.length ? -1 : r
            }

            function s(n) {
                var t = y(n);
                return t && i.getID(t)
            }

            function tt(n) {
                var t = a(n),
                    i;
                return t && (r.hasOwnProperty(t) ? (i = r[t], i !== n && (u(!h(i, t)), r[t] = n)) : r[t] = n), t
            }

            function a(n) {
                return n && n.getAttribute && n.getAttribute(g) || ""
            }

            function it(n, t) {
                var i = a(n);
                i !== t && delete r[i];
                n.setAttribute(g, t);
                r[t] = n
            }

            function rt(n) {
                return r.hasOwnProperty(n) && h(r[n], n) || (r[n] = i.findReactNodeByID(n)), r[n]
            }

            function ut(n) {
                var t = vt.get(n)._rootNodeID;
                return at.isNullComponentID(t) ? null : (r.hasOwnProperty(t) && h(r[t], t) || (r[t] = i.findReactNodeByID(t)), r[t])
            }

            function h(n, t) {
                if (n) {
                    u(a(n) === t);
                    var r = i.findReactContainerForID(t);
                    if (r && wt(r, n)) return !0
                }
                return !1
            }

            function ft(n) {
                delete r[n]
            }

            function et(n) {
                var t = r[n];
                return t && h(t, n) ? void(l = t) : !1
            }

            function ot(n) {
                l = null;
                f.traverseAncestors(n, et);
                var t = l;
                return l = null, t
            }

            function st(n, t, r, u, f) {
                var e = k.mountComponent(n, t, u, pt);
                n._isTopLevel = !0;
                i._mountImageIntoNode(e, r, f)
            }

            function ht(n, t, i, r) {
                var u = v.ReactReconcileTransaction.getPooled();
                u.perform(st, null, n, t, i, u, r);
                v.ReactReconcileTransaction.release(u)
            }
            var ct = n(10),
                lt = n(30),
                b = (n(39), n(55)),
                at = (n(56), n(57)),
                f = n(64),
                vt = n(65),
                c = n(67),
                yt = n(73),
                k = n(79),
                d = n(84),
                v = n(85),
                pt = n(113),
                wt = n(107),
                y = n(127),
                bt = n(132),
                u = n(133),
                kt = n(144),
                dt = n(147),
                gt = (n(150), f.SEPARATOR),
                g = ct.ID_ATTRIBUTE_NAME,
                r = {},
                p = 1,
                e = 9,
                o = {},
                w = {},
                ni = [],
                l = null,
                i = {
                    _instancesByReactRootID: o,
                    scrollMonitor: function (n, t) {
                        t()
                    },
                    _updateRootComponent: function (n, t, r, u) {
                        return i.scrollMonitor(r, function () {
                            d.enqueueElementInternal(n, t);
                            u && d.enqueueCallbackInternal(n, u)
                        }), n
                    },
                    _registerComponent: function (n, t) {
                        u(t && (t.nodeType === p || t.nodeType === e));
                        lt.ensureScrollValueMonitoring();
                        var r = i.registerContainer(t);
                        return o[r] = n, r
                    },
                    _renderNewRootComponent: function (n, t, r) {
                        var u = bt(n, null),
                            f = i._registerComponent(u, t);
                        return v.batchedUpdates(ht, u, f, t, r), u
                    },
                    render: function (n, t, r) {
                        var f, e;
                        if (u(b.isValidElement(n)), f = o[s(t)], f) {
                            if (e = f._currentElement, dt(e, n)) return i._updateRootComponent(f, n, t, r).getPublicInstance();
                            i.unmountComponentAtNode(t)
                        }
                        var h = y(t),
                            l = h && i.isRenderedByReact(h),
                            a = l && !f,
                            c = i._renderNewRootComponent(n, t, a).getPublicInstance();
                        return r && r.call(c), c
                    },
                    constructAndRenderComponent: function (n, t, r) {
                        var u = b.createElement(n, t);
                        return i.render(u, r)
                    },
                    constructAndRenderComponentByID: function (n, t, r) {
                        var f = document.getElementById(r);
                        return u(f), i.constructAndRenderComponent(n, t, f)
                    },
                    registerContainer: function (n) {
                        var t = s(n);
                        return t && (t = f.getReactRootIDFromNodeID(t)), t || (t = f.createReactRootID()), w[t] = n, t
                    },
                    unmountComponentAtNode: function (n) {
                        u(n && (n.nodeType === p || n.nodeType === e));
                        var t = s(n),
                            r = o[t];
                        return r ? (i.unmountComponentFromNode(r, n), delete o[t], delete w[t], !0) : !1
                    },
                    unmountComponentFromNode: function (n, t) {
                        for (k.unmountComponent(n), t.nodeType === e && (t = t.documentElement); t.lastChild;) t.removeChild(t.lastChild)
                    },
                    findReactContainerForID: function (n) {
                        var t = f.getReactRootIDFromNodeID(n);
                        return w[t]
                    },
                    findReactNodeByID: function (n) {
                        var t = i.findReactContainerForID(n);
                        return i.findComponentRoot(t, n)
                    },
                    isRenderedByReact: function (n) {
                        if (1 !== n.nodeType) return !1;
                        var t = i.getID(n);
                        return t ? t.charAt(0) === gt : !1
                    },
                    getFirstReactDOM: function (n) {
                        for (var t = n; t && t.parentNode !== t;) {
                            if (i.isRenderedByReact(t)) return t;
                            t = t.parentNode
                        }
                        return null
                    },
                    findComponentRoot: function (n, t) {
                        var r = ni,
                            s = 0,
                            c = ot(t) || n,
                            h, e, o;
                        for (r[0] = c.firstChild, r.length = 1; s < r.length;) {
                            for (e = r[s++]; e;) o = i.getID(e), o ? t === o ? h = e : f.isAncestorIDOf(o, t) && (r.length = s = 0, r.push(e.firstChild)) : r.push(e.firstChild), e = e.nextSibling;
                            if (h) return r.length = 0, h
                        }
                        r.length = 0;
                        u(!1)
                    },
                    _mountImageIntoNode: function (n, t, i) {
                        var r, s, o, f;
                        if (u(t && (t.nodeType === p || t.nodeType === e)), i) {
                            if (r = y(t), c.canReuseMarkup(n, r)) return;
                            s = r.getAttribute(c.CHECKSUM_ATTR_NAME);
                            r.removeAttribute(c.CHECKSUM_ATTR_NAME);
                            o = r.outerHTML;
                            r.setAttribute(c.CHECKSUM_ATTR_NAME, s);
                            f = nt(n, o);
                            " (client) " + n.substring(f - 20, f + 20) + "\n (server) " + o.substring(f - 20, f + 20);
                            u(t.nodeType !== e)
                        }
                        u(t.nodeType !== e);
                        kt(t, n)
                    },
                    getReactRootID: s,
                    getID: tt,
                    setID: it,
                    getNode: rt,
                    getNodeFromInstance: ut,
                    purgeID: ft
                };
            yt.measureMethods(i, "ReactMount", {
                _renderNewRootComponent: "_renderNewRootComponent",
                _mountImageIntoNode: "_mountImageIntoNode"
            });
            t.exports = i
        }, {
            10: 10,
            107: 107,
            113: 113,
            127: 127,
            132: 132,
            133: 133,
            144: 144,
            147: 147,
            150: 150,
            30: 30,
            39: 39,
            55: 55,
            56: 56,
            57: 57,
            64: 64,
            65: 65,
            67: 67,
            73: 73,
            79: 79,
            84: 84,
            85: 85
        }],
        69: [function (n, t) {
            "use strict";

            function c(n, t, r) {
                i.push({
                    parentID: n,
                    parentNode: null,
                    type: u.INSERT_MARKUP,
                    markupIndex: o.push(t) - 1,
                    textContent: null,
                    fromIndex: null,
                    toIndex: r
                })
            }

            function l(n, t, r) {
                i.push({
                    parentID: n,
                    parentNode: null,
                    type: u.MOVE_EXISTING,
                    markupIndex: null,
                    textContent: null,
                    fromIndex: t,
                    toIndex: r
                })
            }

            function a(n, t) {
                i.push({
                    parentID: n,
                    parentNode: null,
                    type: u.REMOVE_NODE,
                    markupIndex: null,
                    textContent: null,
                    fromIndex: t,
                    toIndex: null
                })
            }

            function v(n, t) {
                i.push({
                    parentID: n,
                    parentNode: null,
                    type: u.TEXT_CONTENT,
                    markupIndex: null,
                    textContent: t,
                    fromIndex: null,
                    toIndex: null
                })
            }

            function s() {
                i.length && (y.processChildrenUpdates(i, o), e())
            }

            function e() {
                i.length = 0;
                o.length = 0
            }
            var y = n(36),
                u = n(70),
                h = n(79),
                f = n(31),
                r = 0,
                i = [],
                o = [],
                p = {
                    Mixin: {
                        mountChildren: function (n, t, i) {
                            var r = f.instantiateChildren(n, t, i),
                                e, o, u;
                            this._renderedChildren = r;
                            e = [];
                            o = 0;
                            for (u in r)
                                if (r.hasOwnProperty(u)) {
                                    var s = r[u],
                                        c = this._rootNodeID + u,
                                        l = h.mountComponent(s, c, t, i);
                                    s._mountIndex = o;
                                    e.push(l);
                                    o++
                                }
                            return e
                        },
                        updateTextContent: function (n) {
                            var u, t, i;
                            r++;
                            u = !0;
                            try {
                                t = this._renderedChildren;
                                f.unmountChildren(t);
                                for (i in t) t.hasOwnProperty(i) && this._unmountChildByName(t[i], i);
                                this.setTextContent(n);
                                u = !1
                            } finally {
                                r--;
                                r || (u ? e() : s())
                            }
                        },
                        updateChildren: function (n, t, i) {
                            r++;
                            var u = !0;
                            try {
                                this._updateChildren(n, t, i);
                                u = !1
                            } finally {
                                r--;
                                r || (u ? e() : s())
                            }
                        },
                        _updateChildren: function (n, t, i) {
                            var e = this._renderedChildren,
                                o = f.updateChildren(e, n, t, i),
                                r, s, h, u, c;
                            if (this._renderedChildren = o, o || e) {
                                s = 0;
                                h = 0;
                                for (r in o) o.hasOwnProperty(r) && (u = e && e[r], c = o[r], u === c ? (this.moveChild(u, h, s), s = Math.max(u._mountIndex, s), u._mountIndex = h) : (u && (s = Math.max(u._mountIndex, s), this._unmountChildByName(u, r)), this._mountChildByNameAtIndex(c, r, h, t, i)), h++);
                                for (r in e) !e.hasOwnProperty(r) || o && o.hasOwnProperty(r) || this._unmountChildByName(e[r], r)
                            }
                        },
                        unmountChildren: function () {
                            var n = this._renderedChildren;
                            f.unmountChildren(n);
                            this._renderedChildren = null
                        },
                        moveChild: function (n, t, i) {
                            n._mountIndex < i && l(this._rootNodeID, n._mountIndex, t)
                        },
                        createChild: function (n, t) {
                            c(this._rootNodeID, t, n._mountIndex)
                        },
                        removeChild: function (n) {
                            a(this._rootNodeID, n._mountIndex)
                        },
                        setTextContent: function (n) {
                            v(this._rootNodeID, n)
                        },
                        _mountChildByNameAtIndex: function (n, t, i, r, u) {
                            var f = this._rootNodeID + t,
                                e = h.mountComponent(n, f, r, u);
                            n._mountIndex = i;
                            this.createChild(n, e)
                        },
                        _unmountChildByName: function (n) {
                            this.removeChild(n);
                            n._mountIndex = null
                        }
                    }
                };
            t.exports = p
        }, {
            31: 31,
            36: 36,
            70: 70,
            79: 79
        }],
        70: [function (n, t) {
            "use strict";
            var i = n(138),
                r = i({
                    INSERT_MARKUP: null,
                    MOVE_EXISTING: null,
                    REMOVE_NODE: null,
                    TEXT_CONTENT: null
                });
            t.exports = r
        }, {
            138: 138
        }],
        71: [function (n, t) {
            "use strict";

            function e(n) {
                if ("function" == typeof n.type) return n.type;
                var t = n.type,
                    i = r[t];
                return null == i && (r[t] = i = f(t)), i
            }

            function o(n) {
                return l(i), new i(n.type, n.props)
            }

            function s(n) {
                return new u(n)
            }

            function h(n) {
                return n instanceof u
            }
            var c = n(27),
                l = n(133),
                f = null,
                i = null,
                r = {},
                u = null,
                a = {
                    injectGenericComponentClass: function (n) {
                        i = n
                    },
                    injectTextComponentClass: function (n) {
                        u = n
                    },
                    injectComponentClasses: function (n) {
                        c(r, n)
                    },
                    injectAutoWrapper: function (n) {
                        f = n
                    }
                },
                v = {
                    getComponentClassForElement: e,
                    createInternalComponent: o,
                    createInstanceForText: s,
                    isTextComponent: h,
                    injection: a
                };
            t.exports = v
        }, {
            133: 133,
            27: 27
        }],
        72: [function (n, t) {
            "use strict";
            var r = n(133),
                i = {
                    isValidOwner: function (n) {
                        return !(!n || "function" != typeof n.attachRef || "function" != typeof n.detachRef)
                    },
                    addComponentAsRefTo: function (n, t, u) {
                        r(i.isValidOwner(u));
                        u.attachRef(t, n)
                    },
                    removeComponentAsRefFrom: function (n, t, u) {
                        r(i.isValidOwner(u));
                        u.getPublicInstance().refs[t] === n.getPublicInstance() && u.detachRef(t)
                    }
                };
            t.exports = i
        }, {
            133: 133
        }],
        73: [function (n, t) {
            "use strict";

            function r(n, t, i) {
                return i
            }
            var i = {
                enableMeasure: !1,
                storedMeasure: r,
                measureMethods: function () {},
                measure: function (n, t, i) {
                    return i
                },
                injection: {
                    injectMeasure: function (n) {
                        i.storedMeasure = n
                    }
                }
            };
            t.exports = i
        }, {}],
        74: [function (n, t) {
            "use strict";
            t.exports = {}
        }, {}],
        75: [function (n, t) {
            "use strict";
            var i = n(138),
                r = i({
                    prop: null,
                    context: null,
                    childContext: null
                });
            t.exports = r
        }, {
            138: 138
        }],
        76: [function (n, t) {
            "use strict";

            function i(n) {
                function t(t, i, u, f, e) {
                    if (f = f || s, null == i[u]) {
                        var o = r[e];
                        return t ? new Error("Required " + o + " `" + u + "` was not specified in " + ("`" + f + "`.")) : null
                    }
                    return n(i, u, f, e)
                }
                var i = t.bind(null, !1);
                return i.isRequired = t.bind(null, !0), i
            }

            function u(n) {
                function t(t, i, u, e) {
                    var o = t[i],
                        c = f(o),
                        s, h;
                    return c !== n ? (s = r[e], h = k(o), new Error("Invalid " + s + " `" + i + "` of type `" + h + "` " + ("supplied to `" + u + "`, expected `" + n + "`."))) : null
                }
                return i(t)
            }

            function h() {
                return i(g.thatReturns(null))
            }

            function c(n) {
                function t(t, i, u, e) {
                    var o = t[i],
                        c, l, s, h;
                    if (!Array.isArray(o)) return c = r[e], l = f(o), new Error("Invalid " + c + " `" + i + "` of type " + ("`" + l + "` supplied to `" + u + "`, expected an array."));
                    for (s = 0; s < o.length; s++)
                        if (h = n(o, s, u, e), h instanceof Error) return h;
                    return null
                }
                return i(t)
            }

            function l() {
                function n(n, t, i, u) {
                    if (!o.isValidElement(n[t])) {
                        var f = r[u];
                        return new Error("Invalid " + f + " `" + t + "` supplied to " + ("`" + i + "`, expected a ReactElement."))
                    }
                    return null
                }
                return i(n)
            }

            function a(n) {
                function t(t, i, u, f) {
                    if (!(t[i] instanceof n)) {
                        var e = r[f],
                            o = n.name || s;
                        return new Error("Invalid " + e + " `" + i + "` supplied to " + ("`" + u + "`, expected instance of `" + o + "`."))
                    }
                    return null
                }
                return i(t)
            }

            function v(n) {
                function t(t, i, u, f) {
                    for (var s, h, o = t[i], e = 0; e < n.length; e++)
                        if (o === n[e]) return null;
                    return s = r[f], h = JSON.stringify(n), new Error("Invalid " + s + " `" + i + "` of value `" + o + "` " + ("supplied to `" + u + "`, expected one of " + h + "."))
                }
                return i(t)
            }

            function y(n) {
                function t(t, i, u, e) {
                    var o = t[i],
                        c = f(o),
                        l, s, h;
                    if ("object" !== c) return l = r[e], new Error("Invalid " + l + " `" + i + "` of type " + ("`" + c + "` supplied to `" + u + "`, expected an object."));
                    for (s in o)
                        if (o.hasOwnProperty(s) && (h = n(o, s, u, e), h instanceof Error)) return h;
                    return null
                }
                return i(t)
            }

            function p(n) {
                function t(t, i, u, f) {
                    for (var o, s, e = 0; e < n.length; e++)
                        if (o = n[e], null == o(t, i, u, f)) return null;
                    return s = r[f], new Error("Invalid " + s + " `" + i + "` supplied to " + ("`" + u + "`."))
                }
                return i(t)
            }

            function w() {
                function n(n, t, i, u) {
                    if (!e(n[t])) {
                        var f = r[u];
                        return new Error("Invalid " + f + " `" + t + "` supplied to " + ("`" + i + "`, expected a ReactNode."))
                    }
                    return null
                }
                return i(n)
            }

            function b(n) {
                function t(t, i, u, e) {
                    var c = t[i],
                        l = f(c),
                        a, o, s, h;
                    if ("object" !== l) return a = r[e], new Error("Invalid " + a + " `" + i + "` of type `" + l + "` " + ("supplied to `" + u + "`, expected `object`."));
                    for (o in n)
                        if (s = n[o], s && (h = s(c, o, u, e), h)) return h;
                    return null
                }
                return i(t)
            }

            function e(n) {
                switch (typeof n) {
                    case "number":
                    case "string":
                    case "undefined":
                        return !0;
                    case "boolean":
                        return !n;
                    case "object":
                        if (Array.isArray(n)) return n.every(e);
                        if (null === n || o.isValidElement(n)) return !0;
                        n = d.extractIfFragment(n);
                        for (var t in n)
                            if (!e(n[t])) return !1;
                        return !0;
                    default:
                        return !1
                }
            }

            function f(n) {
                var t = typeof n;
                return Array.isArray(n) ? "array" : n instanceof RegExp ? "object" : t
            }

            function k(n) {
                var t = f(n);
                if ("object" === t) {
                    if (n instanceof Date) return "date";
                    if (n instanceof RegExp) return "regexp"
                }
                return t
            }
            var o = n(55),
                d = n(61),
                r = n(74),
                g = n(112),
                s = "<<anonymous>>",
                nt = l(),
                tt = w(),
                it = {
                    array: u("array"),
                    bool: u("boolean"),
                    func: u("function"),
                    number: u("number"),
                    object: u("object"),
                    string: u("string"),
                    any: h(),
                    arrayOf: c,
                    element: nt,
                    instanceOf: a,
                    node: tt,
                    objectOf: y,
                    oneOf: v,
                    oneOfType: p,
                    shape: b
                };
            t.exports = it
        }, {
            112: 112,
            55: 55,
            61: 61,
            74: 74
        }],
        77: [function (n, t) {
            "use strict";

            function i() {
                this.listenersToPut = []
            }
            var r = n(28),
                u = n(30),
                f = n(27);
            f(i.prototype, {
                enqueuePutListener: function (n, t, i) {
                    this.listenersToPut.push({
                        rootNodeID: n,
                        propKey: t,
                        propValue: i
                    })
                },
                putListeners: function () {
                    for (var t, n = 0; n < this.listenersToPut.length; n++) t = this.listenersToPut[n], u.putListener(t.rootNodeID, t.propKey, t.propValue)
                },
                reset: function () {
                    this.listenersToPut.length = 0
                },
                destructor: function () {
                    this.reset()
                }
            });
            r.addPoolingTo(i);
            t.exports = i
        }, {
            27: 27,
            28: 28,
            30: 30
        }],
        78: [function (n, t) {
            "use strict";

            function i() {
                this.reinitializeTransaction();
                this.renderToStaticMarkup = !1;
                this.reactMountReady = u.getPooled(null);
                this.putListenerQueue = e.getPooled()
            }
            var u = n(6),
                o = n(28),
                r = n(30),
                f = n(63),
                e = n(77),
                s = n(101),
                h = n(27),
                c = {
                    initialize: f.getSelectionInformation,
                    close: f.restoreSelection
                },
                l = {
                    initialize: function () {
                        var n = r.isEnabled();
                        return r.setEnabled(!1), n
                    },
                    close: function (n) {
                        r.setEnabled(n)
                    }
                },
                a = {
                    initialize: function () {
                        this.reactMountReady.reset()
                    },
                    close: function () {
                        this.reactMountReady.notifyAll()
                    }
                },
                v = {
                    initialize: function () {
                        this.putListenerQueue.reset()
                    },
                    close: function () {
                        this.putListenerQueue.putListeners()
                    }
                },
                y = [v, c, l, a],
                p = {
                    getTransactionWrappers: function () {
                        return y
                    },
                    getReactMountReady: function () {
                        return this.reactMountReady
                    },
                    getPutListenerQueue: function () {
                        return this.putListenerQueue
                    },
                    destructor: function () {
                        u.release(this.reactMountReady);
                        this.reactMountReady = null;
                        e.release(this.putListenerQueue);
                        this.putListenerQueue = null
                    }
                };
            h(i.prototype, s.Mixin, p);
            o.addPoolingTo(i);
            t.exports = i
        }, {
            101: 101,
            27: 27,
            28: 28,
            30: 30,
            6: 6,
            63: 63,
            77: 77
        }],
        79: [function (n, t) {
            "use strict";

            function r() {
                i.attachRefs(this, this._currentElement)
            }
            var i = n(80),
                u = (n(56), {
                    mountComponent: function (n, t, i, u) {
                        var f = n.mountComponent(t, i, u);
                        return i.getReactMountReady().enqueue(r, n), f
                    },
                    unmountComponent: function (n) {
                        i.detachRefs(n, n._currentElement);
                        n.unmountComponent()
                    },
                    receiveComponent: function (n, t, u, f) {
                        var e = n._currentElement,
                            o;
                        (t !== e || null == t._owner) && (o = i.shouldUpdateRefs(e, t), o && i.detachRefs(n, e), n.receiveComponent(t, u, f), o && u.getReactMountReady().enqueue(r, n))
                    },
                    performUpdateIfNecessary: function (n, t) {
                        n.performUpdateIfNecessary(t)
                    }
                });
            t.exports = u
        }, {
            56: 56,
            80: 80
        }],
        80: [function (n, t) {
            "use strict";

            function u(n, t, i) {
                "function" == typeof n ? n(t.getPublicInstance()) : r.addComponentAsRefTo(t, n, i)
            }

            function f(n, t, i) {
                "function" == typeof n ? n(null) : r.removeComponentAsRefFrom(t, n, i)
            }
            var r = n(72),
                i = {};
            i.attachRefs = function (n, t) {
                var i = t.ref;
                null != i && u(i, n, t._owner)
            };
            i.shouldUpdateRefs = function (n, t) {
                return t._owner !== n._owner || t.ref !== n.ref
            };
            i.detachRefs = function (n, t) {
                var i = t.ref;
                null != i && f(i, n, t._owner)
            };
            t.exports = i
        }, {
            72: 72
        }],
        81: [function (n, t) {
            "use strict";
            var r = {
                    injectCreateReactRootIndex: function (n) {
                        i.createReactRootIndex = n
                    }
                },
                i = {
                    createReactRootIndex: null,
                    injection: r
                };
            t.exports = i
        }, {}],
        82: [function (n, t) {
            "use strict";

            function s(n) {
                var t, s;
                o(r.isValidElement(n));
                try {
                    return s = u.createReactRootID(), t = i.getPooled(!1), t.perform(function () {
                        var i = e(n, null),
                            r = i.mountComponent(s, t, f);
                        return c.addChecksumToMarkup(r)
                    }, null)
                } finally {
                    i.release(t)
                }
            }

            function h(n) {
                var t, s;
                o(r.isValidElement(n));
                try {
                    return s = u.createReactRootID(), t = i.getPooled(!0), t.perform(function () {
                        var i = e(n, null);
                        return i.mountComponent(s, t, f)
                    }, null)
                } finally {
                    i.release(t)
                }
            }
            var r = n(55),
                u = n(64),
                c = n(67),
                i = n(83),
                f = n(113),
                e = n(132),
                o = n(133);
            t.exports = {
                renderToString: s,
                renderToStaticMarkup: h
            }
        }, {
            113: 113,
            132: 132,
            133: 133,
            55: 55,
            64: 64,
            67: 67,
            83: 83
        }],
        83: [function (n, t) {
            "use strict";

            function i(n) {
                this.reinitializeTransaction();
                this.renderToStaticMarkup = n;
                this.reactMountReady = r.getPooled(null);
                this.putListenerQueue = u.getPooled()
            }
            var e = n(28),
                r = n(6),
                u = n(77),
                o = n(101),
                s = n(27),
                f = n(112),
                h = {
                    initialize: function () {
                        this.reactMountReady.reset()
                    },
                    close: f
                },
                c = {
                    initialize: function () {
                        this.putListenerQueue.reset()
                    },
                    close: f
                },
                l = [c, h],
                a = {
                    getTransactionWrappers: function () {
                        return l
                    },
                    getReactMountReady: function () {
                        return this.reactMountReady
                    },
                    getPutListenerQueue: function () {
                        return this.putListenerQueue
                    },
                    destructor: function () {
                        r.release(this.reactMountReady);
                        this.reactMountReady = null;
                        u.release(this.putListenerQueue);
                        this.putListenerQueue = null
                    }
                };
            s(i.prototype, o.Mixin, a);
            e.addPoolingTo(i);
            t.exports = i
        }, {
            101: 101,
            112: 112,
            27: 27,
            28: 28,
            6: 6,
            77: 77
        }],
        84: [function (n, t) {
            "use strict";

            function i(n) {
                n !== f.currentlyMountingInstance && h.enqueueUpdate(n)
            }

            function r(n) {
                u(null == o.current);
                var t = s.get(n);
                return t ? t === f.currentlyUnmountingInstance ? null : t : null
            }
            var f = n(66),
                o = n(39),
                e = n(55),
                s = n(65),
                h = n(85),
                c = n(27),
                u = n(133),
                l = (n(150), {
                    enqueueCallback: function (n, t) {
                        u("function" == typeof t);
                        var e = r(n);
                        return e && e !== f.currentlyMountingInstance ? (e._pendingCallbacks ? e._pendingCallbacks.push(t) : e._pendingCallbacks = [t], void i(e)) : null
                    },
                    enqueueCallbackInternal: function (n, t) {
                        u("function" == typeof t);
                        n._pendingCallbacks ? n._pendingCallbacks.push(t) : n._pendingCallbacks = [t];
                        i(n)
                    },
                    enqueueForceUpdate: function (n) {
                        var t = r(n, "forceUpdate");
                        t && (t._pendingForceUpdate = !0, i(t))
                    },
                    enqueueReplaceState: function (n, t) {
                        var u = r(n, "replaceState");
                        u && (u._pendingStateQueue = [t], u._pendingReplaceState = !0, i(u))
                    },
                    enqueueSetState: function (n, t) {
                        var u = r(n, "setState"),
                            f;
                        u && (f = u._pendingStateQueue || (u._pendingStateQueue = []), f.push(t), i(u))
                    },
                    enqueueSetProps: function (n, t) {
                        var f = r(n, "setProps"),
                            o, s;
                        f && (u(f._isTopLevel), o = f._pendingElement || f._currentElement, s = c({}, o.props, t), f._pendingElement = e.cloneAndReplaceProps(o, s), i(f))
                    },
                    enqueueReplaceProps: function (n, t) {
                        var f = r(n, "replaceProps"),
                            o;
                        f && (u(f._isTopLevel), o = f._pendingElement || f._currentElement, f._pendingElement = e.cloneAndReplaceProps(o, t), i(f))
                    },
                    enqueueElementInternal: function (n, t) {
                        n._pendingElement = t;
                        i(n)
                    }
                });
            t.exports = l
        }, {
            133: 133,
            150: 150,
            27: 27,
            39: 39,
            55: 55,
            65: 65,
            66: 66,
            85: 85
        }],
        85: [function (n, t) {
            "use strict";

            function l() {
                r(f.ReactReconcileTransaction && u)
            }

            function s() {
                this.reinitializeTransaction();
                this.dirtyComponentsLength = null;
                this.callbackQueue = e.getPooled();
                this.reconcileTransaction = f.ReactReconcileTransaction.getPooled()
            }

            function p(n, t, i, r, f) {
                l();
                u.batchedUpdates(n, t, i, r, f)
            }

            function w(n, t) {
                return n._mountOrder - t._mountOrder
            }

            function b(n) {
                var o = n.dirtyComponentsLength,
                    u, t, f, e;
                for (r(o === i.length), i.sort(w), u = 0; o > u; u++)
                    if (t = i[u], f = t._pendingCallbacks, t._pendingCallbacks = null, nt.performUpdateIfNecessary(t, n.reconcileTransaction), f)
                        for (e = 0; e < f.length; e++) n.callbackQueue.enqueue(f[e], t.getPublicInstance())
            }

            function a(n) {
                return l(), u.isBatchingUpdates ? void i.push(n) : void u.batchedUpdates(a, n)
            }

            function k(n, t) {
                r(u.isBatchingUpdates);
                c.enqueue(n, t);
                h = !0
            }
            var e = n(6),
                d = n(28),
                g = (n(39), n(73)),
                nt = n(79),
                v = n(101),
                tt = n(27),
                r = n(133),
                i = (n(150), []),
                c = e.getPooled(),
                h = !1,
                u = null,
                it = {
                    initialize: function () {
                        this.dirtyComponentsLength = i.length
                    },
                    close: function () {
                        this.dirtyComponentsLength !== i.length ? (i.splice(0, this.dirtyComponentsLength), o()) : i.length = 0
                    }
                },
                rt = {
                    initialize: function () {
                        this.callbackQueue.reset()
                    },
                    close: function () {
                        this.callbackQueue.notifyAll()
                    }
                },
                ut = [it, rt],
                o, y, f;
            tt(s.prototype, v.Mixin, {
                getTransactionWrappers: function () {
                    return ut
                },
                destructor: function () {
                    this.dirtyComponentsLength = null;
                    e.release(this.callbackQueue);
                    this.callbackQueue = null;
                    f.ReactReconcileTransaction.release(this.reconcileTransaction);
                    this.reconcileTransaction = null
                },
                perform: function (n, t, i) {
                    return v.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, n, t, i)
                }
            });
            d.addPoolingTo(s);
            o = function () {
                for (var n, t; i.length || h;) i.length && (n = s.getPooled(), n.perform(b, null, n), s.release(n)), h && (h = !1, t = c, c = e.getPooled(), t.notifyAll(), e.release(t))
            };
            o = g.measure("ReactUpdates", "flushBatchedUpdates", o);
            y = {
                injectReconcileTransaction: function (n) {
                    r(n);
                    f.ReactReconcileTransaction = n
                },
                injectBatchingStrategy: function (n) {
                    r(n);
                    r("function" == typeof n.batchedUpdates);
                    r("boolean" == typeof n.isBatchingUpdates);
                    u = n
                }
            };
            f = {
                ReactReconcileTransaction: null,
                batchedUpdates: p,
                enqueueUpdate: a,
                flushBatchedUpdates: o,
                injection: y,
                asap: k
            };
            t.exports = f
        }, {
            101: 101,
            133: 133,
            150: 150,
            27: 27,
            28: 28,
            39: 39,
            6: 6,
            73: 73,
            79: 79
        }],
        86: [function (n, t) {
            "use strict";
            var r = n(10),
                i = r.injection.MUST_USE_ATTRIBUTE,
                u = {
                    Properties: {
                        cx: i,
                        cy: i,
                        d: i,
                        dx: i,
                        dy: i,
                        fill: i,
                        fillOpacity: i,
                        fontFamily: i,
                        fontSize: i,
                        fx: i,
                        fy: i,
                        gradientTransform: i,
                        gradientUnits: i,
                        markerEnd: i,
                        markerMid: i,
                        markerStart: i,
                        offset: i,
                        opacity: i,
                        patternContentUnits: i,
                        patternUnits: i,
                        points: i,
                        preserveAspectRatio: i,
                        r: i,
                        rx: i,
                        ry: i,
                        spreadMethod: i,
                        stopColor: i,
                        stopOpacity: i,
                        stroke: i,
                        strokeDasharray: i,
                        strokeLinecap: i,
                        strokeOpacity: i,
                        strokeWidth: i,
                        textAnchor: i,
                        transform: i,
                        version: i,
                        viewBox: i,
                        x1: i,
                        x2: i,
                        x: i,
                        y1: i,
                        y2: i,
                        y: i
                    },
                    DOMAttributeNames: {
                        fillOpacity: "fill-opacity",
                        fontFamily: "font-family",
                        fontSize: "font-size",
                        gradientTransform: "gradientTransform",
                        gradientUnits: "gradientUnits",
                        markerEnd: "marker-end",
                        markerMid: "marker-mid",
                        markerStart: "marker-start",
                        patternContentUnits: "patternContentUnits",
                        patternUnits: "patternUnits",
                        preserveAspectRatio: "preserveAspectRatio",
                        spreadMethod: "spreadMethod",
                        stopColor: "stop-color",
                        stopOpacity: "stop-opacity",
                        strokeDasharray: "stroke-dasharray",
                        strokeLinecap: "stroke-linecap",
                        strokeOpacity: "stroke-opacity",
                        strokeWidth: "stroke-width",
                        textAnchor: "text-anchor",
                        viewBox: "viewBox"
                    }
                };
            t.exports = u
        }, {
            10: 10
        }],
        87: [function (n, t) {
            "use strict";

            function c(n) {
                var t, i;
                return "selectionStart" in n && v.hasSelectionCapabilities(n) ? {
                    start: n.selectionStart,
                    end: n.selectionEnd
                } : window.getSelection ? (t = window.getSelection(), {
                    anchorNode: t.anchorNode,
                    anchorOffset: t.anchorOffset,
                    focusNode: t.focusNode,
                    focusOffset: t.focusOffset
                }) : document.selection ? (i = document.selection.createRange(), {
                    parentElement: i.parentElement(),
                    text: i.text,
                    top: i.boundingTop,
                    left: i.boundingLeft
                }) : void 0
            }

            function o(n) {
                var i, t;
                return e || null == r || r !== p() ? null : (i = c(r), !u || !b(u, i) ? (u = i, t = y.getPooled(h.select, f, n), t.type = "select", t.target = r, a.accumulateTwoPhaseDispatches(t), t) : void 0)
            }
            var l = n(15),
                a = n(20),
                v = n(63),
                y = n(93),
                p = n(119),
                w = n(136),
                s = n(139),
                b = n(146),
                i = l.topLevelTypes,
                h = {
                    select: {
                        phasedRegistrationNames: {
                            bubbled: s({
                                onSelect: null
                            }),
                            captured: s({
                                onSelectCapture: null
                            })
                        },
                        dependencies: [i.topBlur, i.topContextMenu, i.topFocus, i.topKeyDown, i.topMouseDown, i.topMouseUp, i.topSelectionChange]
                    }
                },
                r = null,
                f = null,
                u = null,
                e = !1,
                k = {
                    eventTypes: h,
                    extractEvents: function (n, t, s, h) {
                        switch (n) {
                            case i.topFocus:
                                (w(t) || "true" === t.contentEditable) && (r = t, f = s, u = null);
                                break;
                            case i.topBlur:
                                r = null;
                                f = null;
                                u = null;
                                break;
                            case i.topMouseDown:
                                e = !0;
                                break;
                            case i.topContextMenu:
                            case i.topMouseUp:
                                return e = !1, o(h);
                            case i.topSelectionChange:
                            case i.topKeyDown:
                            case i.topKeyUp:
                                return o(h)
                        }
                    }
                };
            t.exports = k
        }, {
            119: 119,
            136: 136,
            139: 139,
            146: 146,
            15: 15,
            20: 20,
            63: 63,
            93: 93
        }],
        88: [function (n, t) {
            "use strict";
            var i = Math.pow(2, 53),
                r = {
                    createReactRootIndex: function () {
                        return Math.ceil(Math.random() * i)
                    }
                };
            t.exports = r
        }, {}],
        89: [function (n, t) {
            "use strict";
            var s = n(15),
                h = n(19),
                c = n(20),
                l = n(90),
                a = n(93),
                v = n(94),
                y = n(96),
                p = n(97),
                w = n(92),
                b = n(98),
                k = n(99),
                d = n(100),
                g = n(120),
                nt = n(133),
                i = n(139),
                u = (n(150), s.topLevelTypes),
                r = {
                    blur: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onBlur: !0
                            }),
                            captured: i({
                                onBlurCapture: !0
                            })
                        }
                    },
                    click: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onClick: !0
                            }),
                            captured: i({
                                onClickCapture: !0
                            })
                        }
                    },
                    contextMenu: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onContextMenu: !0
                            }),
                            captured: i({
                                onContextMenuCapture: !0
                            })
                        }
                    },
                    copy: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onCopy: !0
                            }),
                            captured: i({
                                onCopyCapture: !0
                            })
                        }
                    },
                    cut: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onCut: !0
                            }),
                            captured: i({
                                onCutCapture: !0
                            })
                        }
                    },
                    doubleClick: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onDoubleClick: !0
                            }),
                            captured: i({
                                onDoubleClickCapture: !0
                            })
                        }
                    },
                    drag: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onDrag: !0
                            }),
                            captured: i({
                                onDragCapture: !0
                            })
                        }
                    },
                    dragEnd: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onDragEnd: !0
                            }),
                            captured: i({
                                onDragEndCapture: !0
                            })
                        }
                    },
                    dragEnter: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onDragEnter: !0
                            }),
                            captured: i({
                                onDragEnterCapture: !0
                            })
                        }
                    },
                    dragExit: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onDragExit: !0
                            }),
                            captured: i({
                                onDragExitCapture: !0
                            })
                        }
                    },
                    dragLeave: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onDragLeave: !0
                            }),
                            captured: i({
                                onDragLeaveCapture: !0
                            })
                        }
                    },
                    dragOver: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onDragOver: !0
                            }),
                            captured: i({
                                onDragOverCapture: !0
                            })
                        }
                    },
                    dragStart: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onDragStart: !0
                            }),
                            captured: i({
                                onDragStartCapture: !0
                            })
                        }
                    },
                    drop: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onDrop: !0
                            }),
                            captured: i({
                                onDropCapture: !0
                            })
                        }
                    },
                    focus: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onFocus: !0
                            }),
                            captured: i({
                                onFocusCapture: !0
                            })
                        }
                    },
                    input: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onInput: !0
                            }),
                            captured: i({
                                onInputCapture: !0
                            })
                        }
                    },
                    keyDown: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onKeyDown: !0
                            }),
                            captured: i({
                                onKeyDownCapture: !0
                            })
                        }
                    },
                    keyPress: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onKeyPress: !0
                            }),
                            captured: i({
                                onKeyPressCapture: !0
                            })
                        }
                    },
                    keyUp: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onKeyUp: !0
                            }),
                            captured: i({
                                onKeyUpCapture: !0
                            })
                        }
                    },
                    load: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onLoad: !0
                            }),
                            captured: i({
                                onLoadCapture: !0
                            })
                        }
                    },
                    error: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onError: !0
                            }),
                            captured: i({
                                onErrorCapture: !0
                            })
                        }
                    },
                    mouseDown: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onMouseDown: !0
                            }),
                            captured: i({
                                onMouseDownCapture: !0
                            })
                        }
                    },
                    mouseMove: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onMouseMove: !0
                            }),
                            captured: i({
                                onMouseMoveCapture: !0
                            })
                        }
                    },
                    mouseOut: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onMouseOut: !0
                            }),
                            captured: i({
                                onMouseOutCapture: !0
                            })
                        }
                    },
                    mouseOver: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onMouseOver: !0
                            }),
                            captured: i({
                                onMouseOverCapture: !0
                            })
                        }
                    },
                    mouseUp: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onMouseUp: !0
                            }),
                            captured: i({
                                onMouseUpCapture: !0
                            })
                        }
                    },
                    paste: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onPaste: !0
                            }),
                            captured: i({
                                onPasteCapture: !0
                            })
                        }
                    },
                    reset: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onReset: !0
                            }),
                            captured: i({
                                onResetCapture: !0
                            })
                        }
                    },
                    scroll: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onScroll: !0
                            }),
                            captured: i({
                                onScrollCapture: !0
                            })
                        }
                    },
                    submit: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onSubmit: !0
                            }),
                            captured: i({
                                onSubmitCapture: !0
                            })
                        }
                    },
                    touchCancel: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onTouchCancel: !0
                            }),
                            captured: i({
                                onTouchCancelCapture: !0
                            })
                        }
                    },
                    touchEnd: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onTouchEnd: !0
                            }),
                            captured: i({
                                onTouchEndCapture: !0
                            })
                        }
                    },
                    touchMove: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onTouchMove: !0
                            }),
                            captured: i({
                                onTouchMoveCapture: !0
                            })
                        }
                    },
                    touchStart: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onTouchStart: !0
                            }),
                            captured: i({
                                onTouchStartCapture: !0
                            })
                        }
                    },
                    wheel: {
                        phasedRegistrationNames: {
                            bubbled: i({
                                onWheel: !0
                            }),
                            captured: i({
                                onWheelCapture: !0
                            })
                        }
                    }
                },
                f = {
                    topBlur: r.blur,
                    topClick: r.click,
                    topContextMenu: r.contextMenu,
                    topCopy: r.copy,
                    topCut: r.cut,
                    topDoubleClick: r.doubleClick,
                    topDrag: r.drag,
                    topDragEnd: r.dragEnd,
                    topDragEnter: r.dragEnter,
                    topDragExit: r.dragExit,
                    topDragLeave: r.dragLeave,
                    topDragOver: r.dragOver,
                    topDragStart: r.dragStart,
                    topDrop: r.drop,
                    topError: r.error,
                    topFocus: r.focus,
                    topInput: r.input,
                    topKeyDown: r.keyDown,
                    topKeyPress: r.keyPress,
                    topKeyUp: r.keyUp,
                    topLoad: r.load,
                    topMouseDown: r.mouseDown,
                    topMouseMove: r.mouseMove,
                    topMouseOut: r.mouseOut,
                    topMouseOver: r.mouseOver,
                    topMouseUp: r.mouseUp,
                    topPaste: r.paste,
                    topReset: r.reset,
                    topScroll: r.scroll,
                    topSubmit: r.submit,
                    topTouchCancel: r.touchCancel,
                    topTouchEnd: r.touchEnd,
                    topTouchMove: r.touchMove,
                    topTouchStart: r.touchStart,
                    topWheel: r.wheel
                },
                e, o;
            for (e in f) f[e].dependencies = [e];
            o = {
                eventTypes: r,
                executeDispatch: function (n, t, i) {
                    var r = h.executeDispatch(n, t, i);
                    r === !1 && (n.stopPropagation(), n.preventDefault())
                },
                extractEvents: function (n, t, i, r) {
                    var s = f[n],
                        e, o;
                    if (!s) return null;
                    switch (n) {
                        case u.topInput:
                        case u.topLoad:
                        case u.topError:
                        case u.topReset:
                        case u.topSubmit:
                            e = a;
                            break;
                        case u.topKeyPress:
                            if (0 === g(r)) return null;
                        case u.topKeyDown:
                        case u.topKeyUp:
                            e = y;
                            break;
                        case u.topBlur:
                        case u.topFocus:
                            e = v;
                            break;
                        case u.topClick:
                            if (2 === r.button) return null;
                        case u.topContextMenu:
                        case u.topDoubleClick:
                        case u.topMouseDown:
                        case u.topMouseMove:
                        case u.topMouseOut:
                        case u.topMouseOver:
                        case u.topMouseUp:
                            e = p;
                            break;
                        case u.topDrag:
                        case u.topDragEnd:
                        case u.topDragEnter:
                        case u.topDragExit:
                        case u.topDragLeave:
                        case u.topDragOver:
                        case u.topDragStart:
                        case u.topDrop:
                            e = w;
                            break;
                        case u.topTouchCancel:
                        case u.topTouchEnd:
                        case u.topTouchMove:
                        case u.topTouchStart:
                            e = b;
                            break;
                        case u.topScroll:
                            e = k;
                            break;
                        case u.topWheel:
                            e = d;
                            break;
                        case u.topCopy:
                        case u.topCut:
                        case u.topPaste:
                            e = l
                    }
                    return nt(e), o = e.getPooled(s, i, r), c.accumulateTwoPhaseDispatches(o), o
                }
            };
            t.exports = o
        }, {
            100: 100,
            120: 120,
            133: 133,
            139: 139,
            15: 15,
            150: 150,
            19: 19,
            20: 20,
            90: 90,
            92: 92,
            93: 93,
            94: 94,
            96: 96,
            97: 97,
            98: 98,
            99: 99
        }],
        90: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                r.call(this, n, t, i)
            }
            var r = n(93),
                u = {
                    clipboardData: function (n) {
                        return "clipboardData" in n ? n.clipboardData : window.clipboardData
                    }
                };
            r.augmentClass(i, u);
            t.exports = i
        }, {
            93: 93
        }],
        91: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                r.call(this, n, t, i)
            }
            var r = n(93);
            r.augmentClass(i, {
                data: null
            });
            t.exports = i
        }, {
            93: 93
        }],
        92: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                r.call(this, n, t, i)
            }
            var r = n(97);
            r.augmentClass(i, {
                dataTransfer: null
            });
            t.exports = i
        }, {
            97: 97
        }],
        93: [function (n, t) {
            "use strict";

            function r(n, t, r) {
                var f, u, e, o;
                this.dispatchConfig = n;
                this.dispatchMarker = t;
                this.nativeEvent = r;
                f = this.constructor.Interface;
                for (u in f) f.hasOwnProperty(u) && (e = f[u], this[u] = e ? e(r) : r[u]);
                o = null != r.defaultPrevented ? r.defaultPrevented : r.returnValue === !1;
                this.isDefaultPrevented = o ? i.thatReturnsTrue : i.thatReturnsFalse;
                this.isPropagationStopped = i.thatReturnsFalse
            }
            var u = n(28),
                f = n(27),
                i = n(112),
                e = n(123),
                o = {
                    type: null,
                    target: e,
                    currentTarget: i.thatReturnsNull,
                    eventPhase: null,
                    bubbles: null,
                    cancelable: null,
                    timeStamp: function (n) {
                        return n.timeStamp || Date.now()
                    },
                    defaultPrevented: null,
                    isTrusted: null
                };
            f(r.prototype, {
                preventDefault: function () {
                    this.defaultPrevented = !0;
                    var n = this.nativeEvent;
                    n.preventDefault ? n.preventDefault() : n.returnValue = !1;
                    this.isDefaultPrevented = i.thatReturnsTrue
                },
                stopPropagation: function () {
                    var n = this.nativeEvent;
                    n.stopPropagation ? n.stopPropagation() : n.cancelBubble = !0;
                    this.isPropagationStopped = i.thatReturnsTrue
                },
                persist: function () {
                    this.isPersistent = i.thatReturnsTrue
                },
                isPersistent: i.thatReturnsFalse,
                destructor: function () {
                    var t = this.constructor.Interface,
                        n;
                    for (n in t) this[n] = null;
                    this.dispatchConfig = null;
                    this.dispatchMarker = null;
                    this.nativeEvent = null
                }
            });
            r.Interface = o;
            r.augmentClass = function (n, t) {
                var i = this,
                    r = Object.create(i.prototype);
                f(r, n.prototype);
                n.prototype = r;
                n.prototype.constructor = n;
                n.Interface = f({}, i.Interface, t);
                n.augmentClass = i.augmentClass;
                u.addPoolingTo(n, u.threeArgumentPooler)
            };
            u.addPoolingTo(r, u.threeArgumentPooler);
            t.exports = r
        }, {
            112: 112,
            123: 123,
            27: 27,
            28: 28
        }],
        94: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                r.call(this, n, t, i)
            }
            var r = n(99);
            r.augmentClass(i, {
                relatedTarget: null
            });
            t.exports = i
        }, {
            99: 99
        }],
        95: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                r.call(this, n, t, i)
            }
            var r = n(93);
            r.augmentClass(i, {
                data: null
            });
            t.exports = i
        }, {
            93: 93
        }],
        96: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                r.call(this, n, t, i)
            }
            var r = n(99),
                u = n(120),
                f = n(121),
                e = n(122),
                o = {
                    key: f,
                    location: null,
                    ctrlKey: null,
                    shiftKey: null,
                    altKey: null,
                    metaKey: null,
                    repeat: null,
                    locale: null,
                    getModifierState: e,
                    charCode: function (n) {
                        return "keypress" === n.type ? u(n) : 0
                    },
                    keyCode: function (n) {
                        return "keydown" === n.type || "keyup" === n.type ? n.keyCode : 0
                    },
                    which: function (n) {
                        return "keypress" === n.type ? u(n) : "keydown" === n.type || "keyup" === n.type ? n.keyCode : 0
                    }
                };
            r.augmentClass(i, o);
            t.exports = i
        }, {
            120: 120,
            121: 121,
            122: 122,
            99: 99
        }],
        97: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                r.call(this, n, t, i)
            }
            var r = n(99),
                u = n(102),
                f = n(122),
                e = {
                    screenX: null,
                    screenY: null,
                    clientX: null,
                    clientY: null,
                    ctrlKey: null,
                    shiftKey: null,
                    altKey: null,
                    metaKey: null,
                    getModifierState: f,
                    button: function (n) {
                        var t = n.button;
                        return "which" in n ? t : 2 === t ? 2 : 4 === t ? 1 : 0
                    },
                    buttons: null,
                    relatedTarget: function (n) {
                        return n.relatedTarget || (n.fromElement === n.srcElement ? n.toElement : n.fromElement)
                    },
                    pageX: function (n) {
                        return "pageX" in n ? n.pageX : n.clientX + u.currentScrollLeft
                    },
                    pageY: function (n) {
                        return "pageY" in n ? n.pageY : n.clientY + u.currentScrollTop
                    }
                };
            r.augmentClass(i, e);
            t.exports = i
        }, {
            102: 102,
            122: 122,
            99: 99
        }],
        98: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                r.call(this, n, t, i)
            }
            var r = n(99),
                u = n(122),
                f = {
                    touches: null,
                    targetTouches: null,
                    changedTouches: null,
                    altKey: null,
                    metaKey: null,
                    ctrlKey: null,
                    shiftKey: null,
                    getModifierState: u
                };
            r.augmentClass(i, f);
            t.exports = i
        }, {
            122: 122,
            99: 99
        }],
        99: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                r.call(this, n, t, i)
            }
            var r = n(93),
                u = n(123),
                f = {
                    view: function (n) {
                        var t, i;
                        return n.view ? n.view : (t = u(n), null != t && t.window === t) ? t : (i = t.ownerDocument, i ? i.defaultView || i.parentWindow : window)
                    },
                    detail: function (n) {
                        return n.detail || 0
                    }
                };
            r.augmentClass(i, f);
            t.exports = i
        }, {
            123: 123,
            93: 93
        }],
        100: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                r.call(this, n, t, i)
            }
            var r = n(97),
                u = {
                    deltaX: function (n) {
                        return "deltaX" in n ? n.deltaX : "wheelDeltaX" in n ? -n.wheelDeltaX : 0
                    },
                    deltaY: function (n) {
                        return "deltaY" in n ? n.deltaY : "wheelDeltaY" in n ? -n.wheelDeltaY : "wheelDelta" in n ? -n.wheelDelta : 0
                    },
                    deltaZ: null,
                    deltaMode: null
                };
            r.augmentClass(i, u);
            t.exports = i
        }, {
            97: 97
        }],
        101: [function (n, t) {
            "use strict";
            var r = n(133),
                u = {
                    reinitializeTransaction: function () {
                        this.transactionWrappers = this.getTransactionWrappers();
                        this.wrapperInitData ? this.wrapperInitData.length = 0 : this.wrapperInitData = [];
                        this._isInTransaction = !1
                    },
                    _isInTransaction: !1,
                    getTransactionWrappers: null,
                    isInTransaction: function () {
                        return !!this._isInTransaction
                    },
                    perform: function (n, t, i, u, f, e, o, s) {
                        r(!this.isInTransaction());
                        var h, c;
                        try {
                            this._isInTransaction = !0;
                            h = !0;
                            this.initializeAll(0);
                            c = n.call(t, i, u, f, e, o, s);
                            h = !1
                        } finally {
                            try {
                                if (h) try {
                                    this.closeAll(0)
                                } catch (l) {} else this.closeAll(0)
                            } finally {
                                this._isInTransaction = !1
                            }
                        }
                        return c
                    },
                    initializeAll: function (n) {
                        for (var u, r = this.transactionWrappers, t = n; t < r.length; t++) {
                            u = r[t];
                            try {
                                this.wrapperInitData[t] = i.OBSERVED_ERROR;
                                this.wrapperInitData[t] = u.initialize ? u.initialize.call(this) : null
                            } finally {
                                if (this.wrapperInitData[t] === i.OBSERVED_ERROR) try {
                                    this.initializeAll(t + 1)
                                } catch (f) {}
                            }
                        }
                    },
                    closeAll: function (n) {
                        var u, t, f, e, o;
                        for (r(this.isInTransaction()), u = this.transactionWrappers, t = n; t < u.length; t++) {
                            e = u[t];
                            o = this.wrapperInitData[t];
                            try {
                                f = !0;
                                o !== i.OBSERVED_ERROR && e.close && e.close.call(this, o);
                                f = !1
                            } finally {
                                if (f) try {
                                    this.closeAll(t + 1)
                                } catch (s) {}
                            }
                        }
                        this.wrapperInitData.length = 0
                    }
                },
                i = {
                    Mixin: u,
                    OBSERVED_ERROR: {}
                };
            t.exports = i
        }, {
            133: 133
        }],
        102: [function (n, t) {
            "use strict";
            var i = {
                currentScrollLeft: 0,
                currentScrollTop: 0,
                refreshScrollValues: function (n) {
                    i.currentScrollLeft = n.x;
                    i.currentScrollTop = n.y
                }
            };
            t.exports = i
        }, {}],
        103: [function (n, t) {
            "use strict";

            function i(n, t) {
                if (r(null != t), null == n) return t;
                var i = Array.isArray(n),
                    u = Array.isArray(t);
                return i && u ? (n.push.apply(n, t), n) : i ? (n.push(t), n) : u ? [n].concat(t) : [n, t]
            }
            var r = n(133);
            t.exports = i
        }, {
            133: 133
        }],
        104: [function (n, t) {
            "use strict";

            function r(n) {
                for (var t = 1, r = 0, u = 0; u < n.length; u++) t = (t + n.charCodeAt(u)) % i, r = (r + t) % i;
                return t | r << 16
            }
            var i = 65521;
            t.exports = r
        }, {}],
        105: [function (n, t) {
            function i(n) {
                return n.replace(r, function (n, t) {
                    return t.toUpperCase()
                })
            }
            var r = /-(.)/g;
            t.exports = i
        }, {}],
        106: [function (n, t) {
            "use strict";

            function i(n) {
                return r(n.replace(u, "ms-"))
            }
            var r = n(105),
                u = /^-ms-/;
            t.exports = i
        }, {
            105: 105
        }],
        107: [function (n, t) {
            function i(n, t) {
                return n && t ? n === t ? !0 : r(n) ? !1 : r(t) ? i(n, t.parentNode) : n.contains ? n.contains(t) : n.compareDocumentPosition ? !!(16 & n.compareDocumentPosition(t)) : !1 : !1
            }
            var r = n(137);
            t.exports = i
        }, {
            137: 137
        }],
        108: [function (n, t) {
            function i(n) {
                return !!n && ("object" == typeof n || "function" == typeof n) && "length" in n && !("setInterval" in n) && "number" != typeof n.nodeType && (Array.isArray(n) || "callee" in n || "item" in n)
            }

            function r(n) {
                return i(n) ? Array.isArray(n) ? n.slice() : u(n) : [n]
            }
            var u = n(148);
            t.exports = r
        }, {
            148: 148
        }],
        109: [function (n, t) {
            "use strict";

            function i(n) {
                var t = u.createFactory(n);
                return r.createClass({
                    tagName: n.toUpperCase(),
                    displayName: "ReactFullPageComponent" + n,
                    componentWillUnmount: function () {
                        f(!1)
                    },
                    render: function () {
                        return t(this.props)
                    }
                })
            }
            var r = n(33),
                u = n(55),
                f = n(133);
            t.exports = i
        }, {
            133: 133,
            33: 33,
            55: 55
        }],
        110: [function (n, t) {
            function f(n) {
                var t = n.match(h);
                return t && t[1].toLowerCase()
            }

            function e(n, t) {
                var e = u,
                    h, o, l, c, a;
                if (r(!!u), h = f(n), o = h && s(h), o)
                    for (e.innerHTML = o[1] + n + o[2], l = o[0]; l--;) e = e.lastChild;
                else e.innerHTML = n;
                for (c = e.getElementsByTagName("script"), c.length && (r(t), i(c).forEach(t)), a = i(e.childNodes); e.lastChild;) e.removeChild(e.lastChild);
                return a
            }
            var o = n(21),
                i = n(108),
                s = n(125),
                r = n(133),
                u = o.canUseDOM ? document.createElement("div") : null,
                h = /^\s*<(\w+)/;
            t.exports = e
        }, {
            108: 108,
            125: 125,
            133: 133,
            21: 21
        }],
        111: [function (n, t) {
            "use strict";

            function r(n, t) {
                var u = null == t || "boolean" == typeof t || "" === t,
                    r;
                return u ? "" : (r = isNaN(t), r || 0 === t || i.hasOwnProperty(n) && i[n] ? "" + t : ("string" == typeof t && (t = t.trim()), t + "px"))
            }
            var u = n(4),
                i = u.isUnitlessNumber;
            t.exports = r
        }, {
            4: 4
        }],
        112: [function (n, t) {
            function r(n) {
                return function () {
                    return n
                }
            }

            function i() {}
            i.thatReturns = r;
            i.thatReturnsFalse = r(!1);
            i.thatReturnsTrue = r(!0);
            i.thatReturnsNull = r(null);
            i.thatReturnsThis = function () {
                return this
            };
            i.thatReturnsArgument = function (n) {
                return n
            };
            t.exports = i
        }, {}],
        113: [function (n, t) {
            "use strict";
            t.exports = {}
        }, {}],
        114: [function (n, t) {
            "use strict";

            function i(n) {
                return u[n]
            }

            function r(n) {
                return ("" + n).replace(f, i)
            }
            var u = {
                    "&": "&amp;",
                    ">": "&gt;",
                    "<": "&lt;",
                    '"': "&quot;",
                    "'": "&#x27;"
                },
                f = /[&><"']/g;
            t.exports = r
        }, {}],
        115: [function (n, t) {
            "use strict";

            function r(n) {
                return null == n ? null : e(n) ? n : u.has(n) ? f.getNodeFromInstance(n) : (i(null == n.render || "function" != typeof n.render), void i(!1))
            }
            var u = (n(39), n(65)),
                f = n(68),
                i = n(133),
                e = n(135);
            n(150);
            t.exports = r
        }, {
            133: 133,
            135: 135,
            150: 150,
            39: 39,
            65: 65,
            68: 68
        }],
        116: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                var r = n,
                    u = !r.hasOwnProperty(i);
                u && null != t && (r[i] = t)
            }

            function r(n) {
                if (null == n) return n;
                var t = {};
                return u(n, i, t), t
            }
            var u = n(149);
            n(150);
            t.exports = r
        }, {
            149: 149,
            150: 150
        }],
        117: [function (n, t) {
            "use strict";

            function i(n) {
                try {
                    n.focus()
                } catch (t) {}
            }
            t.exports = i
        }, {}],
        118: [function (n, t) {
            "use strict";
            var i = function (n, t, i) {
                Array.isArray(n) ? n.forEach(t, i) : n && t.call(i, n)
            };
            t.exports = i
        }, {}],
        119: [function (n, t) {
            function i() {
                try {
                    return document.activeElement || document.body
                } catch (n) {
                    return document.body
                }
            }
            t.exports = i
        }, {}],
        120: [function (n, t) {
            "use strict";

            function i(n) {
                var t, i = n.keyCode;
                return "charCode" in n ? (t = n.charCode, 0 === t && 13 === i && (t = 13)) : t = i, t >= 32 || 13 === t ? t : 0
            }
            t.exports = i
        }, {}],
        121: [function (n, t) {
            "use strict";

            function i(n) {
                var t, i;
                return n.key && (t = u[n.key] || n.key, "Unidentified" !== t) ? t : "keypress" === n.type ? (i = r(n), 13 === i ? "Enter" : String.fromCharCode(i)) : "keydown" === n.type || "keyup" === n.type ? f[n.keyCode] || "Unidentified" : ""
            }
            var r = n(120),
                u = {
                    Esc: "Escape",
                    Spacebar: " ",
                    Left: "ArrowLeft",
                    Up: "ArrowUp",
                    Right: "ArrowRight",
                    Down: "ArrowDown",
                    Del: "Delete",
                    Win: "OS",
                    Menu: "ContextMenu",
                    Apps: "ContextMenu",
                    Scroll: "ScrollLock",
                    MozPrintableKey: "Unidentified"
                },
                f = {
                    8: "Backspace",
                    9: "Tab",
                    12: "Clear",
                    13: "Enter",
                    16: "Shift",
                    17: "Control",
                    18: "Alt",
                    19: "Pause",
                    20: "CapsLock",
                    27: "Escape",
                    32: " ",
                    33: "PageUp",
                    34: "PageDown",
                    35: "End",
                    36: "Home",
                    37: "ArrowLeft",
                    38: "ArrowUp",
                    39: "ArrowRight",
                    40: "ArrowDown",
                    45: "Insert",
                    46: "Delete",
                    112: "F1",
                    113: "F2",
                    114: "F3",
                    115: "F4",
                    116: "F5",
                    117: "F6",
                    118: "F7",
                    119: "F8",
                    120: "F9",
                    121: "F10",
                    122: "F11",
                    123: "F12",
                    144: "NumLock",
                    145: "ScrollLock",
                    224: "Meta"
                };
            t.exports = i
        }, {
            120: 120
        }],
        122: [function (n, t) {
            "use strict";

            function i(n) {
                var r = this,
                    t = r.nativeEvent,
                    i;
                return t.getModifierState ? t.getModifierState(n) : (i = u[n], i ? !!t[i] : !1)
            }

            function r() {
                return i
            }
            var u = {
                Alt: "altKey",
                Control: "ctrlKey",
                Meta: "metaKey",
                Shift: "shiftKey"
            };
            t.exports = r
        }, {}],
        123: [function (n, t) {
            "use strict";

            function i(n) {
                var t = n.target || n.srcElement || window;
                return 3 === t.nodeType ? t.parentNode : t
            }
            t.exports = i
        }, {}],
        124: [function (n, t) {
            "use strict";

            function r(n) {
                var t = n && (i && n[i] || n[u]);
                if ("function" == typeof t) return t
            }
            var i = "function" == typeof Symbol && Symbol.iterator,
                u = "@@iterator";
            t.exports = r
        }, {}],
        125: [function (n, t) {
            function h(n) {
                return l(!!u), s.hasOwnProperty(n) || (n = "*"), f.hasOwnProperty(n) || (u.innerHTML = "*" === n ? "<link />" : "<" + n + "><\/" + n + ">", f[n] = !u.firstChild), f[n] ? s[n] : null
            }
            var c = n(21),
                l = n(133),
                u = c.canUseDOM ? document.createElement("div") : null,
                f = {
                    circle: !0,
                    defs: !0,
                    ellipse: !0,
                    g: !0,
                    line: !0,
                    linearGradient: !0,
                    path: !0,
                    polygon: !0,
                    polyline: !0,
                    radialGradient: !0,
                    rect: !0,
                    stop: !0,
                    text: !0
                },
                e = [1, '<select multiple="true">', "<\/select>"],
                r = [1, "<table>", "<\/table>"],
                o = [3, "<table><tbody><tr>", "<\/tr><\/tbody><\/table>"],
                i = [1, "<svg>", "<\/svg>"],
                s = {
                    "*": [1, "?<div>", "<\/div>"],
                    area: [1, "<map>", "<\/map>"],
                    col: [2, "<table><tbody><\/tbody><colgroup>", "<\/colgroup><\/table>"],
                    legend: [1, "<fieldset>", "<\/fieldset>"],
                    param: [1, "<object>", "<\/object>"],
                    tr: [2, "<table><tbody>", "<\/tbody><\/table>"],
                    optgroup: e,
                    option: e,
                    caption: r,
                    colgroup: r,
                    tbody: r,
                    tfoot: r,
                    thead: r,
                    td: o,
                    th: o,
                    circle: i,
                    defs: i,
                    ellipse: i,
                    g: i,
                    line: i,
                    linearGradient: i,
                    path: i,
                    polygon: i,
                    polyline: i,
                    radialGradient: i,
                    rect: i,
                    stop: i,
                    text: i
                };
            t.exports = h
        }, {
            133: 133,
            21: 21
        }],
        126: [function (n, t) {
            "use strict";

            function i(n) {
                for (; n && n.firstChild;) n = n.firstChild;
                return n
            }

            function r(n) {
                for (; n;) {
                    if (n.nextSibling) return n.nextSibling;
                    n = n.parentNode
                }
            }

            function u(n, t) {
                for (var u = i(n), f = 0, e = 0; u;) {
                    if (3 === u.nodeType) {
                        if (e = f + u.textContent.length, t >= f && e >= t) return {
                            node: u,
                            offset: t - f
                        };
                        f = e
                    }
                    u = i(r(u))
                }
            }
            t.exports = u
        }, {}],
        127: [function (n, t) {
            "use strict";

            function i(n) {
                return n ? n.nodeType === r ? n.documentElement : n.firstChild : null
            }
            var r = 9;
            t.exports = i
        }, {}],
        128: [function (n, t) {
            "use strict";

            function r() {
                return !i && u.canUseDOM && (i = "textContent" in document.documentElement ? "textContent" : "innerText"), i
            }
            var u = n(21),
                i = null;
            t.exports = r
        }, {
            21: 21
        }],
        129: [function (n, t) {
            "use strict";

            function i(n) {
                return n === window ? {
                    x: window.pageXOffset || document.documentElement.scrollLeft,
                    y: window.pageYOffset || document.documentElement.scrollTop
                } : {
                    x: n.scrollLeft,
                    y: n.scrollTop
                }
            }
            t.exports = i
        }, {}],
        130: [function (n, t) {
            function i(n) {
                return n.replace(r, "-$1").toLowerCase()
            }
            var r = /([A-Z])/g;
            t.exports = i
        }, {}],
        131: [function (n, t) {
            "use strict";

            function i(n) {
                return r(n).replace(u, "-ms-")
            }
            var r = n(130),
                u = /^ms-/;
            t.exports = i
        }, {
            130: 130
        }],
        132: [function (n, t) {
            "use strict";

            function f(n) {
                return "function" == typeof n && "function" == typeof n.prototype.mountComponent && "function" == typeof n.prototype.receiveComponent
            }

            function i(n, t) {
                var e, i;
                return ((null === n || n === !1) && (n = o.emptyElement), "object" == typeof n) ? (i = n, e = t === i.type && "string" == typeof i.type ? r.createInternalComponent(i) : f(i.type) ? new i.type(i) : new u) : "string" == typeof n || "number" == typeof n ? e = r.createInstanceForText(n) : h(!1), e.construct(n), e._mountIndex = 0, e._mountImage = null, e
            }
            var e = n(37),
                o = n(57),
                r = n(71),
                s = n(27),
                h = n(133),
                u = (n(150), function () {});
            s(u.prototype, e.Mixin, {
                _instantiateReactComponent: i
            });
            t.exports = i
        }, {
            133: 133,
            150: 150,
            27: 27,
            37: 37,
            57: 57,
            71: 71
        }],
        133: [function (n, t) {
            "use strict";
            var i = function (n, t, i, r, u, f, e, o) {
                var s, h, c;
                if (!n) {
                    void 0 === t ? s = new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.") : (h = [i, r, u, f, e, o], c = 0, s = new Error("Invariant Violation: " + t.replace(/%s/g, function () {
                        return h[c++]
                    })));
                    throw s.framesToPop = 1, s;
                }
            };
            t.exports = i
        }, {}],
        134: [function (n, t) {
            "use strict";

            function u(n, t) {
                var f, u, e;
                return !r.canUseDOM || t && !("addEventListener" in document) ? !1 : (f = "on" + n, u = f in document, u || (e = document.createElement("div"), e.setAttribute(f, "return;"), u = "function" == typeof e[f]), !u && i && "wheel" === n && (u = document.implementation.hasFeature("Events.wheel", "3.0")), u)
            }
            var i, r = n(21);
            r.canUseDOM && (i = document.implementation && document.implementation.hasFeature && document.implementation.hasFeature("", "") !== !0);
            t.exports = u
        }, {
            21: 21
        }],
        135: [function (n, t) {
            function i(n) {
                return !(!n || !("function" == typeof Node ? n instanceof Node : "object" == typeof n && "number" == typeof n.nodeType && "string" == typeof n.nodeName))
            }
            t.exports = i
        }, {}],
        136: [function (n, t) {
            "use strict";

            function i(n) {
                return n && ("INPUT" === n.nodeName && r[n.type] || "TEXTAREA" === n.nodeName)
            }
            var r = {
                color: !0,
                date: !0,
                datetime: !0,
                "datetime-local": !0,
                email: !0,
                month: !0,
                number: !0,
                password: !0,
                range: !0,
                search: !0,
                tel: !0,
                text: !0,
                time: !0,
                url: !0,
                week: !0
            };
            t.exports = i
        }, {}],
        137: [function (n, t) {
            function i(n) {
                return r(n) && 3 == n.nodeType
            }
            var r = n(135);
            t.exports = i
        }, {
            135: 135
        }],
        138: [function (n, t) {
            "use strict";
            var i = n(133),
                r = function (n) {
                    var t, r = {};
                    i(n instanceof Object && !Array.isArray(n));
                    for (t in n) n.hasOwnProperty(t) && (r[t] = t);
                    return r
                };
            t.exports = r
        }, {
            133: 133
        }],
        139: [function (n, t) {
            var i = function (n) {
                var t;
                for (t in n)
                    if (n.hasOwnProperty(t)) return t;
                return null
            };
            t.exports = i
        }, {}],
        140: [function (n, t) {
            "use strict";

            function i(n, t, i) {
                var f, u;
                if (!n) return null;
                f = {};
                for (u in n) r.call(n, u) && (f[u] = t.call(i, n[u], u, n));
                return f
            }
            var r = Object.prototype.hasOwnProperty;
            t.exports = i
        }, {}],
        141: [function (n, t) {
            "use strict";

            function i(n) {
                var t = {};
                return function (i) {
                    return t.hasOwnProperty(i) || (t[i] = n.call(this, i)), t[i]
                }
            }
            t.exports = i
        }, {}],
        142: [function (n, t) {
            "use strict";

            function i(n) {
                return u(r.isValidElement(n)), n
            }
            var r = n(55),
                u = n(133);
            t.exports = i
        }, {
            133: 133,
            55: 55
        }],
        143: [function (n, t) {
            "use strict";

            function i(n) {
                return '"' + r(n) + '"'
            }
            var r = n(114);
            t.exports = i
        }, {
            114: 114
        }],
        144: [function (n, t) {
            "use strict";
            var u = n(21),
                f = /^[ \r\n\t\f]/,
                e = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,
                i = function (n, t) {
                    n.innerHTML = t
                },
                r;
            ("undefined" != typeof MSApp && MSApp.execUnsafeLocalFunction && (i = function (n, t) {
                MSApp.execUnsafeLocalFunction(function () {
                    n.innerHTML = t
                })
            }), u.canUseDOM) && (r = document.createElement("div"), r.innerHTML = " ", "" === r.innerHTML && (i = function (n, t) {
                if (n.parentNode && n.parentNode.replaceChild(n, n), f.test(t) || "<" === t[0] && e.test(t)) {
                    n.innerHTML = "" + t;
                    var i = n.firstChild;
                    1 === i.data.length ? n.removeChild(i) : i.deleteData(0, 1)
                } else n.innerHTML = t
            }));
            t.exports = i
        }, {
            21: 21
        }],
        145: [function (n, t) {
            "use strict";
            var r = n(21),
                u = n(114),
                f = n(144),
                i = function (n, t) {
                    n.textContent = t
                };
            r.canUseDOM && ("textContent" in document.documentElement || (i = function (n, t) {
                f(n, u(t))
            }));
            t.exports = i
        }, {
            114: 114,
            144: 144,
            21: 21
        }],
        146: [function (n, t) {
            "use strict";

            function i(n, t) {
                if (n === t) return !0;
                var i;
                for (i in n)
                    if (n.hasOwnProperty(i) && (!t.hasOwnProperty(i) || n[i] !== t[i])) return !1;
                for (i in t)
                    if (t.hasOwnProperty(i) && !n.hasOwnProperty(i)) return !1;
                return !0
            }
            t.exports = i
        }, {}],
        147: [function (n, t) {
            "use strict";

            function i(n, t) {
                var r, i;
                if (null != n && null != t) {
                    if (r = typeof n, i = typeof t, "string" === r || "number" === r) return "string" === i || "number" === i;
                    if ("object" === i && n.type === t.type && n.key === t.key) return n._owner === t._owner
                }
                return !1
            }
            n(150);
            t.exports = i
        }, {
            150: 150
        }],
        148: [function (n, t) {
            function r(n) {
                var t = n.length,
                    u, r;
                if (i(!Array.isArray(n) && ("object" == typeof n || "function" == typeof n)), i("number" == typeof t), i(0 === t || t - 1 in n), n.hasOwnProperty) try {
                    return Array.prototype.slice.call(n)
                } catch (f) {}
                for (u = Array(t), r = 0; t > r; r++) u[r] = n[r];
                return u
            }
            var i = n(133);
            t.exports = r
        }, {
            133: 133
        }],
        149: [function (n, t) {
            "use strict";

            function o(n) {
                return p[n]
            }

            function r(n, t) {
                return n && null != n.key ? e(n.key) : t.toString(36)
            }

            function s(n) {
                return ("" + n).replace(w, o)
            }

            function e(n) {
                return "$" + s(n)
            }

            function u(n, t, o, s, h) {
                var k = typeof n,
                    a, w, b, p, d, g, nt, ut, ft, tt, it, rt;
                if (("undefined" === k || "boolean" === k) && (n = null), null === n || "string" === k || "number" === k || c.isValidElement(n)) return s(h, n, "" === t ? f + r(n, 0) : t, o), 1;
                if (p = 0, Array.isArray(n))
                    for (d = 0; d < n.length; d++) a = n[d], w = ("" !== t ? t + i : f) + r(a, d), b = o + p, p += u(a, w, b, s, h);
                else if (g = v(n), g)
                    if (ut = g.call(n), g !== n.entries)
                        for (ft = 0; !(nt = ut.next()).done;) a = nt.value, w = ("" !== t ? t + i : f) + r(a, ft++), b = o + p, p += u(a, w, b, s, h);
                    else
                        for (; !(nt = ut.next()).done;) tt = nt.value, tt && (a = tt[1], w = ("" !== t ? t + i : f) + e(tt[0]) + i + r(a, 0), b = o + p, p += u(a, w, b, s, h));
                else if ("object" === k) {
                    y(1 !== n.nodeType);
                    it = l.extract(n);
                    for (rt in it) it.hasOwnProperty(rt) && (a = it[rt], w = ("" !== t ? t + i : f) + e(rt) + i + r(a, 0), b = o + p, p += u(a, w, b, s, h))
                }
                return p
            }

            function h(n, t, i) {
                return null == n ? 0 : u(n, "", 0, t, i)
            }
            var c = n(55),
                l = n(61),
                a = n(64),
                v = n(124),
                y = n(133),
                f = (n(150), a.SEPARATOR),
                i = ":",
                p = {
                    "=": "=0",
                    ".": "=1",
                    ":": "=2"
                },
                w = /[=.:]/g;
            t.exports = h
        }, {
            124: 124,
            133: 133,
            150: 150,
            55: 55,
            61: 61,
            64: 64
        }],
        150: [function (n, t) {
            "use strict";
            var i = n(112),
                r = i;
            t.exports = r
        }, {
            112: 112
        }]
    }, {}, [1])(1)
});
! function (n) {
    if ("object" == typeof exports && "undefined" != typeof module) module.exports = n();
    else if ("function" == typeof define && define.amd) define([], n);
    else {
        var t;
        "undefined" != typeof window ? t = window : "undefined" != typeof global ? t = global : "undefined" != typeof self && (t = self);
        t.Reflux = n()
    }
}(function () {
    var n;
    return function t(n, i, r) {
        function u(f, o) {
            var h, s;
            if (!i[f]) {
                if (!n[f]) {
                    if (h = "function" == typeof require && require, !o && h) return h(f, !0);
                    if (e) return e(f, !0);
                    throw new Error("Cannot find module '" + f + "'");
                }
                s = i[f] = {
                    exports: {}
                };
                n[f][0].call(s.exports, function (t) {
                    var i = n[f][1][t];
                    return u(i ? i : t)
                }, s, s.exports, t, n, i, r)
            }
            return i[f].exports
        }
        for (var e = "function" == typeof require && require, f = 0; f < r.length; f++) u(r[f]);
        return u
    }({
        1: [function (n, t) {
            "use strict";

            function r(n, t, i) {
                this.fn = n;
                this.context = t;
                this.once = i || !1
            }

            function i() {}
            i.prototype._events = void 0;
            i.prototype.listeners = function (n) {
                if (!this._events || !this._events[n]) return [];
                for (var t = 0, r = this._events[n].length, i = []; r > t; t++) i.push(this._events[n][t].fn);
                return i
            };
            i.prototype.emit = function (n, t, i, r, u, f) {
                if (!this._events || !this._events[n]) return !1;
                var h, e, l, s = this._events[n],
                    a = s.length,
                    c = arguments.length,
                    o = s[0];
                if (1 === a) {
                    switch (o.once && this.removeListener(n, o.fn, !0), c) {
                        case 1:
                            return o.fn.call(o.context), !0;
                        case 2:
                            return o.fn.call(o.context, t), !0;
                        case 3:
                            return o.fn.call(o.context, t, i), !0;
                        case 4:
                            return o.fn.call(o.context, t, i, r), !0;
                        case 5:
                            return o.fn.call(o.context, t, i, r, u), !0;
                        case 6:
                            return o.fn.call(o.context, t, i, r, u, f), !0
                    }
                    for (e = 1, h = new Array(c - 1); c > e; e++) h[e - 1] = arguments[e];
                    o.fn.apply(o.context, h)
                } else
                    for (e = 0; a > e; e++) switch (s[e].once && this.removeListener(n, s[e].fn, !0), c) {
                        case 1:
                            s[e].fn.call(s[e].context);
                            break;
                        case 2:
                            s[e].fn.call(s[e].context, t);
                            break;
                        case 3:
                            s[e].fn.call(s[e].context, t, i);
                            break;
                        default:
                            if (!h)
                                for (l = 1, h = new Array(c - 1); c > l; l++) h[l - 1] = arguments[l];
                            s[e].fn.apply(s[e].context, h)
                    }
                return !0
            };
            i.prototype.on = function (n, t, i) {
                return this._events || (this._events = {}), this._events[n] || (this._events[n] = []), this._events[n].push(new r(t, i || this)), this
            };
            i.prototype.once = function (n, t, i) {
                return this._events || (this._events = {}), this._events[n] || (this._events[n] = []), this._events[n].push(new r(t, i || this, !0)), this
            };
            i.prototype.removeListener = function (n, t, i) {
                var u, f, r, e;
                if (!this._events || !this._events[n]) return this;
                if (u = this._events[n], f = [], t)
                    for (r = 0, e = u.length; e > r; r++) u[r].fn !== t && u[r].once !== i && f.push(u[r]);
                return this._events[n] = f.length ? f : null, this
            };
            i.prototype.removeAllListeners = function (n) {
                return this._events ? (n ? this._events[n] = null : this._events = {}, this) : this
            };
            i.prototype.off = i.prototype.removeListener;
            i.prototype.addListener = i.prototype.on;
            i.prototype.setMaxListeners = function () {
                return this
            };
            i.EventEmitter = i;
            i.EventEmitter2 = i;
            i.EventEmitter3 = i;
            "object" == typeof t && t.exports && (t.exports = i)
        }, {}],
        2: [function (t, i) {
            (function (t) {
                ! function (t, r, u) {
                    r[t] = r[t] || u();
                    "undefined" != typeof i && i.exports ? i.exports = r[t] : "function" == typeof n && n.amd && n(function () {
                        return r[t]
                    })
                }("Promise", "undefined" != typeof t ? t : this, function () {
                    "use strict";

                    function r(n, t) {
                        e.add(n, t);
                        f || (f = p(e.drain))
                    }

                    function s(n) {
                        var t, i = typeof n;
                        return null == n || "object" != i && "function" != i || (t = n.then), "function" == typeof t ? t : !1
                    }

                    function u() {
                        for (var n = 0; n < this.chain.length; n++) v(this, 1 === this.state ? this.chain[n].success : this.chain[n].failure, this.chain[n]);
                        this.chain.length = 0
                    }

                    function v(n, t, i) {
                        var r, u;
                        try {
                            t === !1 ? i.reject(n.msg) : (r = t === !0 ? n.msg : t.call(void 0, n.msg), r === i.promise ? i.reject(TypeError("Promise-chain cycle")) : (u = s(r)) ? u.call(r, i.resolve, i.reject) : i.resolve(r))
                        } catch (f) {
                            i.reject(f)
                        }
                    }

                    function h(n) {
                        var e, f, t = this;
                        if (!t.triggered) {
                            t.triggered = !0;
                            t.def && (t = t.def);
                            try {
                                (e = s(n)) ? (f = new l(t), e.call(n, function () {
                                    h.apply(f, arguments)
                                }, function () {
                                    i.apply(f, arguments)
                                })) : (t.msg = n, t.state = 1, t.chain.length > 0 && r(u, t))
                            } catch (o) {
                                i.call(f || new l(t), o)
                            }
                        }
                    }

                    function i(n) {
                        var t = this;
                        t.triggered || (t.triggered = !0, t.def && (t = t.def), t.msg = n, t.state = 2, t.chain.length > 0 && r(u, t))
                    }

                    function c(n, t, i, r) {
                        for (var u = 0; u < t.length; u++) ! function (u) {
                            n.resolve(t[u]).then(function (n) {
                                i(u, n)
                            }, r)
                        }(u)
                    }

                    function l(n) {
                        this.def = n;
                        this.triggered = !1
                    }

                    function y(n) {
                        this.promise = n;
                        this.state = 0;
                        this.triggered = !1;
                        this.chain = [];
                        this.msg = void 0
                    }

                    function t(n) {
                        if ("function" != typeof n) throw TypeError("Not a function");
                        if (0 !== this.__NPO__) throw TypeError("Not a promise");
                        this.__NPO__ = 1;
                        var t = new y(this);
                        this.then = function (n, i) {
                            var f = {
                                success: "function" == typeof n ? n : !0,
                                failure: "function" == typeof i ? i : !1
                            };
                            return f.promise = new this.constructor(function (n, t) {
                                if ("function" != typeof n || "function" != typeof t) throw TypeError("Not a function");
                                f.resolve = n;
                                f.reject = t
                            }), t.chain.push(f), 0 !== t.state && r(u, t), f.promise
                        };
                        this["catch"] = function (n) {
                            return this.then(void 0, n)
                        };
                        try {
                            n.call(void 0, function (n) {
                                h.call(t, n)
                            }, function (n) {
                                i.call(t, n)
                            })
                        } catch (f) {
                            i.call(t, f)
                        }
                    }
                    var n, f, e, a = Object.prototype.toString,
                        p = "undefined" != typeof setImmediate ? function (n) {
                            return setImmediate(n)
                        } : setTimeout,
                        o;
                    try {
                        Object.defineProperty({}, "x", {});
                        n = function (n, t, i, r) {
                            return Object.defineProperty(n, t, {
                                value: i,
                                writable: !0,
                                configurable: r !== !1
                            })
                        }
                    } catch (w) {
                        n = function (n, t, i) {
                            return n[t] = i, n
                        }
                    }
                    return e = function () {
                        function r(n, t) {
                            this.fn = n;
                            this.self = t;
                            this.next = void 0
                        }
                        var i, t, n;
                        return {
                            add: function (u, f) {
                                n = new r(u, f);
                                t ? t.next = n : i = n;
                                t = n;
                                n = void 0
                            },
                            drain: function () {
                                var n = i;
                                for (i = t = f = void 0; n;) n.fn.call(n.self), n = n.next
                            }
                        }
                    }(), o = n({}, "constructor", t, !1), n(t, "prototype", o, !1), n(o, "__NPO__", 0, !1), n(t, "resolve", function (n) {
                        var t = this;
                        return n && "object" == typeof n && 1 === n.__NPO__ ? n : new t(function (t, i) {
                            if ("function" != typeof t || "function" != typeof i) throw TypeError("Not a function");
                            t(n)
                        })
                    }), n(t, "reject", function (n) {
                        return new this(function (t, i) {
                            if ("function" != typeof t || "function" != typeof i) throw TypeError("Not a function");
                            i(n)
                        })
                    }), n(t, "all", function (n) {
                        var t = this;
                        return "[object Array]" != a.call(n) ? t.reject(TypeError("Not an array")) : 0 === n.length ? t.resolve([]) : new t(function (i, r) {
                            if ("function" != typeof i || "function" != typeof r) throw TypeError("Not a function");
                            var u = n.length,
                                f = Array(u),
                                e = 0;
                            c(t, n, function (n, t) {
                                f[n] = t;
                                ++e === u && i(f)
                            }, r)
                        })
                    }), n(t, "race", function (n) {
                        var t = this;
                        return "[object Array]" != a.call(n) ? t.reject(TypeError("Not an array")) : new t(function (i, r) {
                            if ("function" != typeof i || "function" != typeof r) throw TypeError("Not a function");
                            c(t, n, function (n, t) {
                                i(t)
                            }, r)
                        })
                    }), t
                })
            }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
        }, {}],
        3: [function (n, t) {
            t.exports = {}
        }, {}],
        4: [function (n, t, i) {
            i.createdStores = [];
            i.createdActions = [];
            i.reset = function () {
                for (; i.createdStores.length;) i.createdStores.pop();
                for (; i.createdActions.length;) i.createdActions.pop()
            }
        }, {}],
        5: [function (n, t) {
            var i = n("./utils"),
                r = n("./joins").instanceJoinCreator,
                f = function (n) {
                    for (var t, i = 0, r = {}; i < (n.children || []).length; ++i) t = n.children[i], n[t] && (r[t] = n[t]);
                    return r
                },
                u = function (n) {
                    var r = {},
                        t, e, h;
                    for (t in n) {
                        var o = n[t],
                            c = f(o),
                            s = u(c);
                        r[t] = o;
                        for (e in s) h = s[e], r[t + i.capitalize(e)] = h
                    }
                    return r
                };
            t.exports = {
                hasListener: function (n) {
                    for (var t, i, r, u = 0; u < (this.subscriptions || []).length; ++u)
                        for (r = [].concat(this.subscriptions[u].listenable), t = 0; t < r.length; t++)
                            if (i = r[t], i === n || i.hasListener && i.hasListener(n)) return !0;
                    return !1
                },
                listenToMany: function (n) {
                    var e = u(n),
                        t, f, r;
                    for (t in e) f = i.callbackName(t), r = this[f] ? f : this[t] ? t : void 0, r && this.listenTo(e[t], r, this[f + "Default"] || this[r + "Default"] || r)
                },
                validateListening: function (n) {
                    return n === this ? "Listener is not able to listen to itself" : i.isFunction(n.listen) ? n.hasListener && n.hasListener(this) ? "Listener cannot listen to this listenable because of circular loop" : void 0 : n + " is missing a listen method"
                },
                listenTo: function (n, t, r) {
                    var e, o, u, f = this.subscriptions = this.subscriptions || [];
                    return i.throwIf(this.validateListening(n)), this.fetchInitialState(n, r), e = n.listen(this[t] || t, this), o = function () {
                        var n = f.indexOf(u);
                        i.throwIf(-1 === n, "Tried to remove listen already gone from subscriptions list!");
                        f.splice(n, 1);
                        e()
                    }, u = {
                        stop: o,
                        listenable: n
                    }, f.push(u), u
                },
                stopListeningTo: function (n) {
                    for (var t, r = 0, u = this.subscriptions || []; r < u.length; r++)
                        if (t = u[r], t.listenable === n) return t.stop(), i.throwIf(-1 !== u.indexOf(t), "Failed to remove listen from subscriptions list!"), !0;
                    return !1
                },
                stopListeningToAll: function () {
                    for (var t, n = this.subscriptions || []; t = n.length;) n[0].stop(), i.throwIf(n.length !== t - 1, "Failed to remove listen from subscriptions list!")
                },
                fetchInitialState: function (n, t) {
                    var u, r;
                    t = t && this[t] || t;
                    u = this;
                    i.isFunction(t) && i.isFunction(n.getInitialState) && (r = n.getInitialState(), r && i.isFunction(r.then) ? r.then(function () {
                        t.apply(u, arguments)
                    }) : t.call(this, r))
                },
                joinTrailing: r("last"),
                joinLeading: r("first"),
                joinConcat: r("all"),
                joinStrict: r("strict")
            }
        }, {
            "./joins": 15,
            "./utils": 19
        }],
        6: [function (n, t) {
            var r = n("./utils"),
                i = n("./ListenerMethods");
            t.exports = r.extend({
                componentWillUnmount: i.stopListeningToAll
            }, i)
        }, {
            "./ListenerMethods": 5,
            "./utils": 19
        }],
        7: [function (n, t) {
            var i = n("./utils");
            t.exports = {
                preEmit: function () {},
                shouldEmit: function () {
                    return !0
                },
                listen: function (n, t) {
                    t = t || this;
                    var i = function (i) {
                            u || n.apply(t, i)
                        },
                        r = this,
                        u = !1;
                    return this.emitter.addListener(this.eventLabel, i),
                        function () {
                            u = !0;
                            r.emitter.removeListener(r.eventLabel, i)
                        }
                },
                promise: function (n) {
                    var t = this,
                        i = this.children.indexOf("completed") >= 0 && this.children.indexOf("failed") >= 0;
                    if (!i) throw new Error('Publisher must have "completed" and "failed" child publishers');
                    n.then(function (n) {
                        return t.completed(n)
                    }, function (n) {
                        return t.failed(n)
                    })
                },
                listenAndPromise: function (n, t) {
                    var i = this,
                        r;
                    return t = t || this, this.willCallPromise = (this.willCallPromise || 0) + 1, r = this.listen(function () {
                            if (!n) throw new Error("Expected a function returning a promise but got " + n);
                            var r = arguments,
                                u = n.apply(t, r);
                            return i.promise.call(i, u)
                        }, t),
                        function () {
                            i.willCallPromise--;
                            r.call(i)
                        }
                },
                trigger: function () {
                    var n = arguments,
                        t = this.preEmit.apply(this, n);
                    n = void 0 === t ? n : i.isArguments(t) ? t : [].concat(t);
                    this.shouldEmit.apply(this, n) && this.emitter.emit(this.eventLabel, n)
                },
                triggerAsync: function () {
                    var t = arguments,
                        n = this;
                    i.nextTick(function () {
                        n.trigger.apply(n, t)
                    })
                },
                triggerPromise: function () {
                    var n = this,
                        t = arguments,
                        r = this.children.indexOf("completed") >= 0 && this.children.indexOf("failed") >= 0;
                    return i.createPromise(function (u, f) {
                        if (n.willCallPromise) return void i.nextTick(function () {
                            var i = n.promise;
                            n.promise = function (t) {
                                return t.then(u, f), n.promise = i, n.promise.apply(n, arguments)
                            };
                            n.trigger.apply(n, t)
                        });
                        if (r) var e = n.completed.listen(function (n) {
                                e();
                                o();
                                u(n)
                            }),
                            o = n.failed.listen(function (n) {
                                e();
                                o();
                                f(n)
                            });
                        n.triggerAsync.apply(n, t);
                        r || u()
                    })
                }
            }
        }, {
            "./utils": 19
        }],
        8: [function (n, t) {
            t.exports = {}
        }, {}],
        9: [function (n, t) {
            t.exports = function (n, t) {
                var i, r, u;
                for (i in t)
                    if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
                        if (r = Object.getOwnPropertyDescriptor(t, i), !r.value || "function" != typeof r.value || !t.hasOwnProperty(i)) continue;
                        n[i] = t[i].bind(n)
                    } else {
                        if (u = t[i], "function" != typeof u || !t.hasOwnProperty(i)) continue;
                        n[i] = u.bind(n)
                    }
                return n
            }
        }, {}],
        10: [function (n, t) {
            var r = n("./index"),
                i = n("./utils");
            t.exports = function (n, t) {
                return {
                    getInitialState: function () {
                        return i.isFunction(n.getInitialState) ? void 0 === t ? n.getInitialState() : i.object([t], [n.getInitialState()]) : {}
                    },
                    componentDidMount: function () {
                        i.extend(this, r.ListenerMethods);
                        var u = this,
                            f = void 0 === t ? this.setState : function (n) {
                                u.setState(i.object([t], [n]))
                            };
                        this.listenTo(n, f)
                    },
                    componentWillUnmount: r.ListenerMixin.componentWillUnmount
                }
            }
        }, {
            "./index": 14,
            "./utils": 19
        }],
        11: [function (n, t) {
            var r = n("./index"),
                i = n("./utils");
            t.exports = function (n, t, u) {
                return u = i.isFunction(t) ? t : u, {
                    getInitialState: function () {
                        if (i.isFunction(n.getInitialState)) {
                            if (i.isFunction(t)) return u.call(this, n.getInitialState());
                            var r = u.call(this, n.getInitialState());
                            return r ? i.object([t], [r]) : {}
                        }
                        return {}
                    },
                    componentDidMount: function () {
                        i.extend(this, r.ListenerMethods);
                        var f = this,
                            e = function (n) {
                                if (i.isFunction(t)) f.setState(u.call(f, n));
                                else {
                                    var r = u.call(f, n);
                                    f.setState(i.object([t], [r]))
                                }
                            };
                        this.listenTo(n, e)
                    },
                    componentWillUnmount: r.ListenerMixin.componentWillUnmount
                }
            }
        }, {
            "./index": 14,
            "./utils": 19
        }],
        12: [function (n, t) {
            var r = n("./utils"),
                i = n("./index"),
                e = n("./Keep"),
                u = {
                    preEmit: 1,
                    shouldEmit: 1
                },
                f = function (n) {
                    var o, s, h, c, l, a, t;
                    n = n || {};
                    r.isObject(n) || (n = {
                        actionName: n
                    });
                    for (o in i.ActionMethods)
                        if (!u[o] && i.PublisherMethods[o]) throw new Error("Cannot override API method " + o + " in Reflux.ActionMethods. Use another method name or override it on Reflux.PublisherMethods instead.");
                    for (s in n)
                        if (!u[s] && i.PublisherMethods[s]) throw new Error("Cannot override API method " + s + " in action creation. Use another method name or override it on Reflux.PublisherMethods instead.");
                    for (n.children = n.children || [], n.asyncResult && (n.children = n.children.concat(["completed", "failed"])), h = 0, c = {}; h < n.children.length; h++) l = n.children[h], c[l] = f(l);
                    return a = r.extend({
                        eventLabel: "action",
                        emitter: new r.EventEmitter,
                        _isAction: !0
                    }, i.PublisherMethods, i.ActionMethods, n), t = function () {
                        return t[t.sync ? "trigger" : "triggerPromise"].apply(t, arguments)
                    }, r.extend(t, c, a), e.createdActions.push(t), t
                };
            t.exports = f
        }, {
            "./Keep": 4,
            "./index": 14,
            "./utils": 19
        }],
        13: [function (n, t) {
            var r = n("./utils"),
                i = n("./index"),
                f = n("./Keep"),
                e = n("./mixer"),
                u = {
                    preEmit: 1,
                    shouldEmit: 1
                },
                o = n("./bindMethods");
            t.exports = function (n) {
                function c() {
                    var t, i = 0;
                    if (this.subscriptions = [], this.emitter = new r.EventEmitter, this.eventLabel = "change", o(this, n), this.init && r.isFunction(this.init) && this.init(), this.listenables)
                        for (t = [].concat(this.listenables); i < t.length; i++) this.listenToMany(t[i])
                }
                var t, s, h;
                n = n || {};
                for (t in i.StoreMethods)
                    if (!u[t] && (i.PublisherMethods[t] || i.ListenerMethods[t])) throw new Error("Cannot override API method " + t + " in Reflux.StoreMethods. Use another method name or override it on Reflux.PublisherMethods / Reflux.ListenerMethods instead.");
                for (s in n)
                    if (!u[s] && (i.PublisherMethods[s] || i.ListenerMethods[s])) throw new Error("Cannot override API method " + s + " in store creation. Use another method name or override it on Reflux.PublisherMethods / Reflux.ListenerMethods instead.");
                return n = e(n), r.extend(c.prototype, i.ListenerMethods, i.PublisherMethods, i.StoreMethods, n), h = new c, f.createdStores.push(h), h
            }
        }, {
            "./Keep": 4,
            "./bindMethods": 9,
            "./index": 14,
            "./mixer": 18,
            "./utils": 19
        }],
        14: [function (n, t, i) {
            var r, u;
            i.ActionMethods = n("./ActionMethods");
            i.ListenerMethods = n("./ListenerMethods");
            i.PublisherMethods = n("./PublisherMethods");
            i.StoreMethods = n("./StoreMethods");
            i.createAction = n("./createAction");
            i.createStore = n("./createStore");
            i.connect = n("./connect");
            i.connectFilter = n("./connectFilter");
            i.ListenerMixin = n("./ListenerMixin");
            i.listenTo = n("./listenTo");
            i.listenToMany = n("./listenToMany");
            r = n("./joins").staticJoinCreator;
            i.joinTrailing = i.all = r("last");
            i.joinLeading = r("first");
            i.joinStrict = r("strict");
            i.joinConcat = r("all");
            u = n("./utils");
            i.EventEmitter = u.EventEmitter;
            i.Promise = u.Promise;
            i.createActions = function (n) {
                var f = {},
                    t, r, e;
                for (t in n) n.hasOwnProperty(t) && (r = n[t], e = u.isObject(r) ? t : r, f[e] = i.createAction(r));
                return f
            };
            i.setEventEmitter = function (t) {
                var r = n("./utils");
                i.EventEmitter = r.EventEmitter = t
            };
            i.setPromise = function (t) {
                var r = n("./utils");
                i.Promise = r.Promise = t
            };
            i.setPromiseFactory = function (t) {
                var i = n("./utils");
                i.createPromise = t
            };
            i.nextTick = function (t) {
                var i = n("./utils");
                i.nextTick = t
            };
            i.__keep = n("./Keep");
            Function.prototype.bind || console.error("Function.prototype.bind not available. ES5 shim required. https://github.com/spoike/refluxjs#es5")
        }, {
            "./ActionMethods": 3,
            "./Keep": 4,
            "./ListenerMethods": 5,
            "./ListenerMixin": 6,
            "./PublisherMethods": 7,
            "./StoreMethods": 8,
            "./connect": 10,
            "./connectFilter": 11,
            "./createAction": 12,
            "./createStore": 13,
            "./joins": 15,
            "./listenTo": 16,
            "./listenToMany": 17,
            "./utils": 19
        }],
        15: [function (n, t, i) {
            function e(n, t, i) {
                return function () {
                    var r, f = i.subscriptions,
                        e = f ? f.indexOf(n) : -1;
                    for (u.throwIf(-1 === e, "Tried to remove join already gone from subscriptions list!"), r = 0; r < t.length; r++) t[r]();
                    f.splice(e, 1)
                }
            }

            function f(n) {
                n.listenablesEmitted = new Array(n.numberOfListenables);
                n.args = new Array(n.numberOfListenables)
            }

            function o(n, t) {
                return function () {
                    var i = r.call(arguments);
                    if (t.listenablesEmitted[n]) switch (t.strategy) {
                        case "strict":
                            throw new Error("Strict join failed because listener triggered twice.");
                        case "last":
                            t.args[n] = i;
                            break;
                        case "all":
                            t.args[n].push(i)
                    } else t.listenablesEmitted[n] = !0, t.args[n] = "all" === t.strategy ? [i] : i;
                    s(t)
                }
            }

            function s(n) {
                for (var t = 0; t < n.numberOfListenables; t++)
                    if (!n.listenablesEmitted[t]) return;
                n.callback.apply(n.listener, n.args);
                f(n)
            }
            var r = Array.prototype.slice,
                u = n("./utils"),
                h = n("./createStore"),
                c = {
                    strict: "joinStrict",
                    first: "joinLeading",
                    last: "joinTrailing",
                    all: "joinConcat"
                };
            i.staticJoinCreator = function (n) {
                return function () {
                    var t = r.call(arguments);
                    return h({
                        init: function () {
                            this[c[n]].apply(this, t.concat("triggerAsync"))
                        }
                    })
                }
            };
            i.instanceJoinCreator = function (n) {
                return function () {
                    u.throwIf(arguments.length < 3, "Cannot create a join with less than 2 listenables!");
                    for (var i, s = r.call(arguments), c = s.pop(), h = s.length, l = {
                            numberOfListenables: h,
                            callback: this[c] || c,
                            listener: this,
                            strategy: n
                        }, a = [], t = 0; h > t; t++) u.throwIf(this.validateListening(s[t]));
                    for (t = 0; h > t; t++) a.push(s[t].listen(o(t, l), this));
                    return f(l), i = {
                        listenable: s
                    }, i.stop = e(i, a, this), this.subscriptions = (this.subscriptions || []).concat(i), i
                }
            }
        }, {
            "./createStore": 13,
            "./utils": 19
        }],
        16: [function (n, t) {
            var i = n("./index");
            t.exports = function (n, t, r) {
                return {
                    componentDidMount: function () {
                        for (var u in i.ListenerMethods)
                            if (this[u] !== i.ListenerMethods[u]) {
                                if (this[u]) throw "Can't have other property '" + u + "' when using Reflux.listenTo!";
                                this[u] = i.ListenerMethods[u]
                            }
                        this.listenTo(n, t, r)
                    },
                    componentWillUnmount: i.ListenerMethods.stopListeningToAll
                }
            }
        }, {
            "./index": 14
        }],
        17: [function (n, t) {
            var i = n("./index");
            t.exports = function (n) {
                return {
                    componentDidMount: function () {
                        for (var t in i.ListenerMethods)
                            if (this[t] !== i.ListenerMethods[t]) {
                                if (this[t]) throw "Can't have other property '" + t + "' when using Reflux.listenToMany!";
                                this[t] = i.ListenerMethods[t]
                            }
                        this.listenToMany(n)
                    },
                    componentWillUnmount: i.ListenerMethods.stopListeningToAll
                }
            }
        }, {
            "./index": 14
        }],
        18: [function (n, t) {
            var i = n("./utils");
            t.exports = function (n) {
                var t = {
                        init: [],
                        preEmit: [],
                        shouldEmit: []
                    },
                    r = function u(n) {
                        var r = {};
                        return n.mixins && n.mixins.forEach(function (n) {
                            i.extend(r, u(n))
                        }), i.extend(r, n), Object.keys(t).forEach(function (i) {
                            n.hasOwnProperty(i) && t[i].push(n[i])
                        }), r
                    }(n);
                return t.init.length > 1 && (r.init = function () {
                    var n = arguments;
                    t.init.forEach(function (t) {
                        t.apply(this, n)
                    }, this)
                }), t.preEmit.length > 1 && (r.preEmit = function () {
                    return t.preEmit.reduce(function (n, t) {
                        var i = t.apply(this, n);
                        return void 0 === i ? n : [i]
                    }.bind(this), arguments)
                }), t.shouldEmit.length > 1 && (r.shouldEmit = function () {
                    var n = arguments;
                    return !t.shouldEmit.some(function (t) {
                        return !t.apply(this, n)
                    }, this)
                }), Object.keys(t).forEach(function (n) {
                    1 === t[n].length && (r[n] = t[n][0])
                }), r
            }
        }, {
            "./utils": 19
        }],
        19: [function (n, t, i) {
            var r = i.isObject = function (n) {
                var t = typeof n;
                return "function" === t || "object" === t && !!n
            };
            i.extend = function (n) {
                var i, t, u, f, e;
                if (!r(n)) return n;
                for (u = 1, f = arguments.length; f > u; u++) {
                    i = arguments[u];
                    for (t in i) Object.getOwnPropertyDescriptor && Object.defineProperty ? (e = Object.getOwnPropertyDescriptor(i, t), Object.defineProperty(n, t, e)) : n[t] = i[t]
                }
                return n
            };
            i.isFunction = function (n) {
                return "function" == typeof n
            };
            i.EventEmitter = n("eventemitter3");
            i.nextTick = function (n) {
                setTimeout(n, 0)
            };
            i.capitalize = function (n) {
                return n.charAt(0).toUpperCase() + n.slice(1)
            };
            i.callbackName = function (n) {
                return "on" + i.capitalize(n)
            };
            i.object = function (n, t) {
                for (var r = {}, i = 0; i < n.length; i++) r[n[i]] = t[i];
                return r
            };
            i.Promise = n("native-promise-only");
            i.createPromise = function (n) {
                return new i.Promise(n)
            };
            i.isArguments = function (n) {
                return "object" == typeof n && "callee" in n && "number" == typeof n.length
            };
            i.throwIf = function (n, t) {
                if (n) throw Error(t || n);
            }
        }, {
            eventemitter3: 1,
            "native-promise-only": 2
        }]
    }, {}, [14])(14)
});
! function () {
    accordion = function (n) {
        $(n).find(".collapsible h3").off("click.toggle-button").on("click.toggle-button", function () {
            var n = $(this);
            n.parents(".cost").toggleClass("open");
            n.parents(".cost").next(".sub-module").toggleClass("open").next(".sub-module").toggleClass("open");
            n.toggleClass("open")
        })
    }
}(this, {});
$.extend(!0, window, {
    Acom: {
        Atoms: {},
        Molecules: {},
        Organisms: {},
        Templates: {},
        Calculator: {
            Stores: {},
            Actions: {}
        },
        Misc: {}
    }
});
! function (n, t) {
    t.exports = function (n) {
        return extend({}, n)
    };
    n.clone = t.exports
}(this, {});
Acom.Calculator.createInstanceFactory = function (n) {
    function r(t, i, r) {
        return n.willUpdate ? n.willUpdate(t, i, r) : i
    }

    function u() {
        return t.slug + "-" + ++i
    }
    var t = n.module,
        i = 0;
    return function (i) {
        function h(i) {
            return extend(clone(i), {
                slug: t.slug,
                price: n.getPrice(i) || 0,
                displayName: n.getDisplayName(i),
                setUpdates: s,
                dataStore: o,
                displaySku: Acom.Calculator.Stores.channelCalculator.isChannelCalcEnabled(),
                sku: n.getSku ? n.getSku(i) : "",
                description: n.getDescription ? n.getDescription(i) : ""
            })
        }

        function e() {
            n.isValidOffer && !n.isValidOffer(f) && (f = n.getInitialState());
            f = h(f);
            o.trigger(f)
        }
        var s = Reflux.createAction(),
            o = Reflux.createStore({
                init: function () {
                    var i = this,
                        r, o, s;
                    i.id = u();
                    i.module = t;
                    r = t.getPricingApiStore();
                    r.listen(function (n) {
                        i.pricingData = n;
                        e()
                    });
                    t.hasOwnProperty("getSecondaryPricingApiStore") && (o = t.getSecondaryPricingApiStore(), o.listen(function (n) {
                        i.secondaryPricingData = n;
                        e()
                    }), i.secondaryPricingData = o.data);
                    t.hasOwnProperty("getTertiaryPricingApiStore") && (s = t.getTertiaryPricingApiStore(), s.listen(function (n) {
                        i.tertiaryPricingData = n;
                        e()
                    }), i.tertiaryPricingData = s.data);
                    i.pricingData = r.data;
                    i.componentFactory = React.createFactory(React.createClass({
                        mixins: [Reflux.connect(i)],
                        render: function () {
                            return i.tertiaryPricingData ? !!i.pricingData && !!i.secondaryPricingData && !!i.tertiaryPricingData && React.createElement(n.component, f) : i.secondaryPricingData ? !!i.pricingData && !!i.secondaryPricingData && React.createElement(n.component, f) : !!i.pricingData && React.createElement(n.component, f)
                        }
                    }))
                },
                getInitialState: function () {
                    return f
                }
            }),
            f = h(i || n.getInitialState());
        return s.listen(function (n) {
            var t = extend(clone(f), n);
            f = r(f, t, n);
            e()
        }), o
    }
};
Acom.Calculator.createModule = function (n) {
    var t = {},
        r = {},
        u, f, e, i;
    for (i in n) switch (i) {
        case "icon":
        case "slug":
        case "displayName":
        case "description":
            t[i] = n[i];
            break;
        case "pricingApi":
            pricingApi = n.pricingApi;
            t.getPricingApiStore = function () {
                return u || (u = Acom.Calculator.PricingStoreFactory(n.pricingApi)), u
            };
            break;
        case "secondaryPricingApi":
            secondaryPricingApi = n.secondaryPricingApi;
            t.getSecondaryPricingApiStore = function () {
                return f || (f = Acom.Calculator.PricingStoreFactory(n.secondaryPricingApi)), f
            };
            break;
        case "tertiaryPricingApi":
            tertiaryPricingApi = n.tertiaryPricingApi;
            t.getTertiaryPricingApiStore = function () {
                return e || (e = Acom.Calculator.PricingStoreFactory(n.tertiaryPricingApi)), e
            };
            break;
        default:
            r[i] = n[i]
    }
    return r.module = t, t.createInstance = Acom.Calculator.createInstanceFactory(r), t
};
! function (n, t) {
    t.exports = function (n, t, i) {
        return n ? t : i || !1
    };
    n.displayIf = t.exports
}(this || module.exports, {});
DocClickMixin = function () {
    function i(t) {
        for (var i = 0; i < n.length; i++) $.contains(n[i].getDOMNode(), t.target) || n[i].onDocClick()
    }
    var t = $(document),
        n = [];
    return {
        componentDidMount: function () {
            if (n.length < 1) t.on("click", i);
            n.push(this)
        },
        componentWillUnmount: function () {
            for (var r = 0; r < n.length; r++)
                if (n[r] === this) {
                    n.splice(r, 1);
                    break
                }
            n.length || t.off("click", i)
        }
    }
}();
! function (n, t) {
    t.exports = function (n, t) {
        for (var i in t) t.hasOwnProperty(i) && (n[i] = t[i]);
        return n
    };
    n.extend = t.exports
}(this, {});
! function (n, t) {
    t.exports = function (n, t, i) {
        return n && t ? Math.ceil(i * n / t) : i
    };
    n.factorInput = t.exports
}(this, {});
! function (n, t) {
    t.exports = function (t) {
        for (var r = n.timeFactors, i = 0; i < r.length; i++)
            if (r[i].slug == t) return r[i].displayName.toLowerCase();
        return r[0].displayName.toLowerCase()
    };
    n.factorLabel = t.exports
}(this, {});
! function () {
    function n(n) {
        var t = $(n),
            i = t.offset().top - 200;
        t.addClass("new");
        $("html, body").stop().animate({
            scrollTop: i
        }, 400);
        setTimeout(function () {
            t.removeClass("new")
        }, 700)
    }
    $("body").on("click", "a.focus-and-scroll", function (t) {
        $(this)[0].hash && n($(this)[0].hash);
        t.preventDefault()
    })
}(this, {});
! function (n, t) {
    t.exports = function (n, t) {
        var u;
        t = typeof t == "undefined" ? 2 : t;
        u = Math.pow(10, -t);
        n < u && n !== 0 && (n = u);
        var e = ",",
            i = "" + (n | 0),
            o = Math.pow(10, t),
            s = (Math.round((n - +i) * o) / o).toFixed(t).substr(2),
            r = "$",
            f = i.length > 3 && i.length % 3;
        return f && (r += i.substr(0, f) + e), r += i.substr(f).replace(/(\d{3})(?=\d)/g, "$1" + e), t && (r += "." + s), r
    };
    n.formatCurrency = t.exports
}(this, {});
! function (n, t) {
    t.exports = function (n) {
        var t = arguments;
        return n = formatString.apply(0, Array.apply(0, arguments).map(function (n, t) {
            return typeof n == "string" ? n : "{" + (t - 1) + "}"
        })), n.match(/\{\d+\}|[^{]+|\{\D/g).map(function (n) {
            var i = n.match(/^\{(\d+)\}$/);
            return i !== null ? React.cloneElement(t[+i[1] + 1], {
                key: n
            }) : React.createElement("span", {
                key: n,
                dangerouslySetInnerHTML: {
                    __html: n
                }
            })
        })
    };
    n.formatReact = t.exports
}(this || module.exports, {});
! function (n, t) {
    t.exports = function () {
        var n = Array.apply(0, arguments);
        return n.shift().replace(/\{(\d+)\}/g, function (t, i) {
            return i < n.length ? n[i] : t
        })
    };
    n.formatString = t.exports
}(this || module.exports, {});
! function (n, t) {
    t.exports = function (n, t) {
        var i = 0;
        for (i; i < n.length; i++)
            if (n[i].slug === t) return n[i].displayName
    };
    n.getDisplayNameFromData = t.exports
}(this, {});
! function (n, t) {
    t.exports = function (n, t, i) {
        var c, f = [],
            l = i || 1,
            s, h, e, r, o, u;
        if (!Array.isArray(n)) throw new TypeError("Expecting array, but... wah wah!");
        for (r = 0; r < n.length; r++) {
            for (o = n[r].limit / l, u = 0; u < f.length; u++) o = o - f[u];
            f.push(o)
        }
        for (e = 0, h = 0; t; e++) c = f[e], s = Math.min(t, c), h += s * n[e].price, t -= s;
        return h
    };
    n.getGraduatedPrice = t.exports
}(this, {});
! function (n, t) {
    t.exports = function (t, i) {
        function o(t) {
            var r = [],
                u = Object.keys(n.recommendations.service_counts),
                i = 0;
            for (i; i < t; i++) r.push(u[i]);
            return r
        }
        var f = [],
            r = 0,
            u = 0,
            e = n.recommendations.recommendations;
        for (r; r < e.length; r++)
            if (e[r].services[0] === t && e[r].services.length === 1)
                for (u in e[r].recommendations) f.indexOf(u) === -1 && u !== t && i.indexOf(u) === -1 && Acom.Calculator.Stores.modules.modules[u] && f.push(u);
        return f.length !== 0 ? {
            recommendations: !0,
            serviceList: f
        } : {
            recommendations: !1,
            serviceList: o(5)
        }
    };
    n.getRecommendations = t.exports
}(this, {});
Acom.Calculator.normalizeInstanceSchema = function (n) {
    return !n.slug && n.serviceSlug && (n.slug = n.serviceSlug), n.slug !== "virtual-machines" || n.license || (n.license = ""), n
};
Acom.Calculator.onChange = function (n) {
    var i = {},
        t = n.target,
        r = t.type === "checkbox" ? t.checked : t.value;
    i[t.name] = r;
    this.props.setUpdates(i)
};
Acom.Misc.parseLink = function (n) {
    return function (t) {
        return n.href = t, {
            protocol: window.location.protocol,
            host: window.location.host,
            path: n.pathname[0] === "/" ? n.pathname : "/" + n.pathname,
            queryString: n.search,
            fragment: n.hash,
            toString: function () {
                return this.protocol + "//" + this.host + this.path + this.queryString + this.fragment
            }
        }
    }
}(document.createElement("a"));
Acom.Calculator.PricingStoreFactory = function (n) {
    var t = !1;
    return n = n.replace(/\/+$/, ""), Reflux.createStore({
        init: function () {
            var n = Acom.Calculator.Stores.channelCalculator.currentDiscount();
            n && (this.discount = n);
            this.listenTo(Acom.Calculator.Actions.channelCalculator.setDiscount, function (n) {
                this.discount = n;
                t && this.loadApi()
            });
            this.loadApi()
        },
        loadApi: function () {
            var t = Acom.Misc.parseLink(n),
                i = t.path.split("/"),
                r = i[i.length - 2];
            t.queryString = "?culture=" + Acom.currentCulture;
            this.discount && (["analysis-services", "api-management", "application-gateway", "application-insights", "app-service", "automation", "batch", "container-service", "customer-insights", "data-catalog", "data-factory", "data-lake-analytics", "data-lake-store", "dns", "documentdb", "event-hubs", "functions", "hdinsight", "hockeyapp", "iot-hub", "key-vault", "log-analytics", "logic-apps", "machine-learning", "managed-disks", "mobile-engagement", "notification-hubs", "redis-cache", "scheduler", "search", "security-center", "network-watcher", "site-recovery", "storsimple", "sql-database", "sql-database-elastic", "sql-data-warehouse", "sql-server-stretch-database", "stream-analytics", "traffic-manager", "support", "virtual-machines"].indexOf(r) === -1 && (t.path += "-discounts"), t.queryString += "&discount=" + this.discount);
            t.path += "/";
            $.getJSON(t.toString()).done(this.onApiLoad)
        },
        onApiLoad: function (n) {
            t = !0;
            this.data = n;
            this.trigger(this.data)
        }
    })
};
! function (n, t) {
    t.exports = {
        service_counts: {
            storage: 246946,
            "sql-database": 142530,
            "virtual-machines": 121744,
            "app-service": 84345,
            "virtual-machines": 50990,
            "data-transfers": 35012,
            "vpn-gateway": 28753,
            "cloud-services": 27197,
            backup: 22713,
            "virtual-network": 17179,
            "service-bus": 11655,
            scheduler: 11031,
            "machine-learning": 10833,
            "redis-cache": 8037,
            documentdb: 6609,
            "event-hubs": 6189,
            "visual-studio-team-services": 5242,
            "api-management": 3598,
            automation: 2916,
            "multi-factor-authentication": 2842,
            "stream-analytics": 1618,
            cdn: 1382,
            "media-services": 1361,
            "iot-hub": 1294,
            "mobile-services": 1250,
            hdinsight: 1215,
            remoteapp: 1123,
            "site-recovery": 1101,
            "traffic-manager": 1085
        },
        recommendations: [{
            service_count: 1,
            services: ["app-service"],
            recommendations: {
                "sql-database": 15189,
                "virtual-machines": 75,
                "service-bus": 69,
                scheduler: 47
            }
        }, {
            service_count: 1,
            services: ["sql-database"],
            recommendations: {
                "app-service": 35772,
                "cloud-services": 2762,
                "virtual-machines": 1634,
                "machine-learning": 490
            }
        }, {
            service_count: 1,
            services: ["vpn-gateway"],
            recommendations: {
                "virtual-machines": 1400,
                "sql-database": 43,
                "virtual-machines": 9,
                "virtual-network": 7
            }
        }, {
            service_count: 1,
            services: ["storage"],
            recommendations: {
                "virtual-machines": 55526,
                "sql-database": 539,
                "vpn-gateway": 448,
                "virtual-network": 257
            }
        }, {
            service_count: 2,
            services: ["backup", "storage"],
            recommendations: {
                "virtual-machines": 5506,
                "vpn-gateway": 114,
                "sql-database": 12,
                "virtual-network": 5
            }
        }, {
            service_count: 2,
            services: ["storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 35569,
                "sql-database": 4716,
                backup: 2406,
                "virtual-machines": 460
            }
        }, {
            service_count: 2,
            services: ["app-service", "storage"],
            recommendations: {
                "sql-database": 3027,
                "virtual-machines": 479,
                "virtual-machines": 4,
                "api-management": 1
            }
        }, {
            service_count: 4,
            services: ["app-service", "sql-database", "storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 1608,
                scheduler: 958,
                "cloud-services": 306,
                backup: 109
            }
        }, {
            service_count: 2,
            services: ["virtual-machines", "storage"],
            recommendations: {
                "virtual-machines": 3777,
                "vpn-gateway": 3486,
                "sql-database": 3288,
                backup: 2824
            }
        }, {
            service_count: 1,
            services: ["virtual-machines"],
            recommendations: {
                "vpn-gateway": 3385,
                "sql-database": 1068,
                "virtual-network": 37,
                "app-service": 27
            }
        }, {
            service_count: 1,
            services: ["visual-studio-team-services"],
            recommendations: {
                "sql-database": 1690,
                "virtual-machines": 22,
                "app-service": 6,
                "service-bus": 1
            }
        }, {
            service_count: 2,
            services: ["machine-learning", "storage"],
            recommendations: {
                "virtual-machines": 607,
                "sql-database": 244,
                "vpn-gateway": 8,
                "virtual-machines": 4
            }
        }, {
            service_count: 3,
            services: ["virtual-machines", "storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 2792,
                "sql-database": 341,
                "app-service": 199,
                backup: 150
            }
        }, {
            service_count: 1,
            services: ["virtual-machines"],
            recommendations: {
                "vpn-gateway": 1583,
                "sql-database": 1433,
                "app-service": 808,
                "virtual-machines": 387
            }
        }, {
            service_count: 1,
            services: ["machine-learning"],
            recommendations: {
                "sql-database": 2367,
                "virtual-machines": 69,
                "app-service": 16,
                "cloud-services": 2
            }
        }, {
            service_count: 2,
            services: ["app-service", "sql-database"],
            recommendations: {
                scheduler: 7806,
                "cloud-services": 3205,
                "service-bus": 2958,
                "redis-cache": 569
            }
        }, {
            service_count: 3,
            services: ["backup", "storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 1771,
                "sql-database": 61,
                "virtual-machines": 16,
                "app-service": 2
            }
        }, {
            service_count: 3,
            services: ["sql-database", "storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 5021,
                "app-service": 3144,
                "cloud-services": 330,
                backup: 195
            }
        }, {
            service_count: 2,
            services: ["sql-database", "storage"],
            recommendations: {
                "virtual-machines": 9805,
                "app-service": 487,
                "vpn-gateway": 116,
                "cloud-services": 83
            }
        }, {
            service_count: 2,
            services: ["cloud-services", "sql-database"],
            recommendations: {
                "app-service": 3644,
                "service-bus": 714,
                scheduler: 251,
                "api-management": 132
            }
        }, {
            service_count: 3,
            services: ["virtual-machines", "sql-database", "storage"],
            recommendations: {
                "app-service": 681,
                "virtual-machines": 512,
                "vpn-gateway": 109,
                backup: 69
            }
        }, {
            service_count: 3,
            services: ["machine-learning", "sql-database", "storage"],
            recommendations: {
                "virtual-machines": 358,
                "app-service": 59,
                "vpn-gateway": 20,
                "cloud-services": 11
            }
        }, {
            service_count: 3,
            services: ["app-service", "sql-database", "storage"],
            recommendations: {
                "virtual-machines": 2872,
                scheduler: 580,
                "machine-learning": 176,
                backup: 105
            }
        }, {
            service_count: 3,
            services: ["storage", "virtual-network", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 1731,
                "virtual-machines": 102,
                "sql-database": 102,
                backup: 12
            }
        }, {
            service_count: 3,
            services: ["storage", "vpn-gateway", "virtual-machines"],
            recommendations: {
                backup: 3258,
                "sql-database": 1306,
                "virtual-network": 121,
                "virtual-machines": 27
            }
        }, {
            service_count: 1,
            services: ["multi-factor-authentication"],
            recommendations: {
                "virtual-machines": 1214,
                "sql-database": 28,
                "vpn-gateway": 11
            }
        }, {
            service_count: 1,
            services: ["cloud-services"],
            recommendations: {
                "sql-database": 3146,
                "app-service": 15,
                "virtual-machines": 4,
                scheduler: 3
            }
        }, {
            service_count: 5,
            services: ["app-service", "data-transfers", "sql-database", "storage", "virtual-machines"],
            recommendations: {
                scheduler: 312,
                "vpn-gateway": 262,
                backup: 58,
                "cloud-services": 37
            }
        }, {
            service_count: 4,
            services: ["data-transfers", "virtual-machines", "storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 551,
                backup: 88,
                "app-service": 54,
                "sql-database": 47
            }
        }, {
            service_count: 4,
            services: ["data-transfers", "sql-database", "storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 418,
                "app-service": 272,
                backup: 84,
                "cloud-services": 49
            }
        }, {
            service_count: 3,
            services: ["app-service", "storage", "virtual-machines"],
            recommendations: {
                "sql-database": 1457,
                "vpn-gateway": 924,
                backup: 98,
                "virtual-machines": 11
            }
        }, {
            service_count: 4,
            services: ["cloud-services", "sql-database", "storage", "virtual-machines"],
            recommendations: {
                "app-service": 429,
                "vpn-gateway": 226,
                scheduler: 25,
                "service-bus": 13
            }
        }, {
            service_count: 1,
            services: ["service-bus"],
            recommendations: {
                "sql-database": 995,
                "cloud-services": 140,
                "virtual-machines": 2
            }
        }, {
            service_count: 3,
            services: ["backup", "virtual-machines", "storage"],
            recommendations: {
                "virtual-machines": 164,
                "vpn-gateway": 107,
                "sql-database": 92,
                "app-service": 36
            }
        }, {
            service_count: 3,
            services: ["app-service", "scheduler", "sql-database"],
            recommendations: {
                "cloud-services": 606,
                "service-bus": 205,
                "redis-cache": 187,
                "virtual-machines": 80
            }
        }, {
            service_count: 2,
            services: ["storage", "vpn-gateway"],
            recommendations: {
                "virtual-machines": 1973,
                backup: 51,
                "sql-database": 33,
                "virtual-network": 3
            }
        }, {
            service_count: 4,
            services: ["sql-database", "storage", "vpn-gateway", "virtual-machines"],
            recommendations: {
                "app-service": 304,
                backup: 184,
                "cloud-services": 23,
                "virtual-network": 7
            }
        }, {
            service_count: 4,
            services: ["virtual-machines", "storage", "vpn-gateway", "virtual-machines"],
            recommendations: {
                backup: 305,
                "sql-database": 132,
                "virtual-network": 80,
                "app-service": 14
            }
        }, {
            service_count: 4,
            services: ["virtual-machines", "sql-database", "storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 344,
                "app-service": 312,
                backup: 9,
                "cloud-services": 7
            }
        }, {
            service_count: 3,
            services: ["data-transfers", "storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 2833,
                backup: 793,
                "sql-database": 169,
                "virtual-machines": 23
            }
        }, {
            service_count: 1,
            services: ["backup"],
            recommendations: {
                "virtual-machines": 1311,
                "sql-database": 323,
                "vpn-gateway": 16,
                "app-service": 6
            }
        }, {
            service_count: 2,
            services: ["sql-database", "virtual-machines"],
            recommendations: {
                "app-service": 412,
                "vpn-gateway": 412,
                "cloud-services": 93,
                scheduler: 17
            }
        }, {
            service_count: 3,
            services: ["app-service", "virtual-machines", "storage"],
            recommendations: {
                "sql-database": 1152,
                "virtual-machines": 208,
                backup: 71,
                "vpn-gateway": 67
            }
        }, {
            service_count: 3,
            services: ["app-service", "cloud-services", "sql-database"],
            recommendations: {
                scheduler: 847,
                "service-bus": 178,
                "virtual-machines": 60,
                "api-management": 14
            }
        }, {
            service_count: 4,
            services: ["app-service", "cloud-services", "sql-database", "storage"],
            recommendations: {
                "virtual-machines": 330,
                scheduler: 123,
                "vpn-gateway": 5,
                "machine-learning": 3
            }
        }, {
            service_count: 2,
            services: ["documentdb", "sql-database"],
            recommendations: {
                "app-service": 342,
                "cloud-services": 27,
                "virtual-machines": 14,
                "service-bus": 10
            }
        }, {
            service_count: 4,
            services: ["sql-database", "storage", "virtual-network", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 256,
                "app-service": 114,
                "virtual-machines": 20,
                "cloud-services": 5
            }
        }, {
            service_count: 4,
            services: ["data-transfers", "storage", "vpn-gateway", "virtual-machines"],
            recommendations: {
                backup: 1126,
                "sql-database": 31,
                "virtual-network": 7,
                "virtual-machines": 2
            }
        }, {
            service_count: 1,
            services: ["redis-cache"],
            recommendations: {
                "sql-database": 460,
                "virtual-machines": 6,
                "app-service": 3
            }
        }, {
            service_count: 4,
            services: ["backup", "data-transfers", "storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 550,
                "sql-database": 5,
                "virtual-machines": 1
            }
        }, {
            service_count: 1,
            services: ["api-management"],
            recommendations: {
                "sql-database": 399,
                "virtual-machines": 15,
                "app-service": 8,
                "vpn-gateway": 2
            }
        }, {
            service_count: 2,
            services: ["cloud-services", "storage"],
            recommendations: {
                "sql-database": 502,
                "virtual-machines": 64,
                "virtual-network": 1
            }
        }, {
            service_count: 2,
            services: ["machine-learning", "sql-database"],
            recommendations: {
                "app-service": 435,
                "cloud-services": 115,
                "service-bus": 67,
                scheduler: 42
            }
        }, {
            service_count: 4,
            services: ["app-service", "data-transfers", "sql-database", "storage"],
            recommendations: {
                "virtual-machines": 228,
                scheduler: 186,
                "cloud-services": 9,
                "redis-cache": 4
            }
        }, {
            service_count: 2,
            services: ["scheduler", "sql-database"],
            recommendations: {
                "app-service": 414,
                "cloud-services": 54,
                "virtual-machines": 11,
                "service-bus": 6
            }
        }, {
            service_count: 1,
            services: ["event-hubs"],
            recommendations: {
                "sql-database": 277,
                "service-bus": 124,
                "machine-learning": 55,
                "virtual-machines": 4
            }
        }, {
            service_count: 3,
            services: ["data-transfers", "virtual-machines", "storage"],
            recommendations: {
                backup: 659,
                "vpn-gateway": 625,
                "virtual-machines": 242,
                "app-service": 124
            }
        }, {
            service_count: 3,
            services: ["virtual-machines", "storage", "virtual-network"],
            recommendations: {
                "virtual-machines": 1146,
                "vpn-gateway": 127,
                backup: 59,
                "sql-database": 46
            }
        }, {
            service_count: 2,
            services: ["data-transfers", "storage"],
            recommendations: {
                "virtual-machines": 700,
                "sql-database": 32,
                "vpn-gateway": 4,
                "virtual-machines": 3
            }
        }, {
            service_count: 1,
            services: ["scheduler"],
            recommendations: {
                "sql-database": 471,
                "virtual-machines": 7,
                "app-service": 2
            }
        }, {
            service_count: 4,
            services: ["virtual-machines", "storage", "virtual-network", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 385,
                "sql-database": 25,
                "app-service": 15,
                backup: 6
            }
        }, {
            service_count: 3,
            services: ["virtual-machines", "storage", "vpn-gateway"],
            recommendations: {
                "virtual-machines": 285,
                backup: 70,
                "sql-database": 62,
                "virtual-network": 28
            }
        }, {
            service_count: 4,
            services: ["storage", "virtual-network", "vpn-gateway", "virtual-machines"],
            recommendations: {
                backup: 296,
                "sql-database": 67,
                "virtual-machines": 31,
                automation: 16
            }
        }, {
            service_count: 4,
            services: ["app-service", "virtual-machines", "sql-database", "storage"],
            recommendations: {
                "virtual-machines": 459,
                scheduler: 282,
                "vpn-gateway": 30,
                backup: 26
            }
        }, {
            service_count: 4,
            services: ["app-service", "virtual-machines", "storage", "virtual-machines"],
            recommendations: {
                "sql-database": 216,
                "vpn-gateway": 163,
                backup: 18,
                scheduler: 2
            }
        }, {
            service_count: 2,
            services: ["storage", "virtual-network"],
            recommendations: {
                "virtual-machines": 772,
                "virtual-machines": 28,
                "vpn-gateway": 23,
                "sql-database": 1
            }
        }, {
            service_count: 3,
            services: ["app-service", "data-transfers", "sql-database"],
            recommendations: {
                scheduler: 986,
                "cloud-services": 109,
                "service-bus": 12,
                "virtual-machines": 10
            }
        }, {
            service_count: 3,
            services: ["cloud-services", "sql-database", "storage"],
            recommendations: {
                "virtual-machines": 854,
                "app-service": 250,
                "service-bus": 37,
                scheduler: 22
            }
        }, {
            service_count: 1,
            services: ["documentdb"],
            recommendations: {
                "sql-database": 680,
                "app-service": 111,
                "virtual-machines": 7,
                "service-bus": 1
            }
        }, {
            service_count: 4,
            services: ["backup", "storage", "vpn-gateway", "virtual-machines"],
            recommendations: {
                "sql-database": 794,
                "virtual-network": 103,
                "app-service": 85,
                "virtual-machines": 32
            }
        }, {
            service_count: 3,
            services: ["machine-learning", "storage", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 309,
                "sql-database": 64,
                backup: 28,
                "virtual-machines": 7
            }
        }, {
            service_count: 5,
            services: ["backup", "data-transfers", "storage", "vpn-gateway", "virtual-machines"],
            recommendations: {
                "sql-database": 366,
                "virtual-network": 138,
                automation: 111,
                "app-service": 61
            }
        }, {
            service_count: 4,
            services: ["data-transfers", "storage", "virtual-network", "virtual-machines"],
            recommendations: {
                "vpn-gateway": 406,
                "virtual-machines": 13,
                backup: 5,
                "sql-database": 3
            }
        }, {
            service_count: 2,
            services: ["service-bus", "sql-database"],
            recommendations: {
                "cloud-services": 290,
                "app-service": 111,
                scheduler: 41,
                "machine-learning": 24
            }
        }]
    };
    n.recommendations = t.exports
}(this, {});
! function (n, t) {
    t.exports = function () {
        function r() {
            $(n).scrollTop() >= i ? $(".service-picker").css({
                position: "fixed",
                top: "195px"
            }) : $(".service-picker").css({
                position: "absolute",
                top: "auto"
            })
        }
        var t = $(".fixed-picker-position"),
            i;
        if (t.length && (i = t.offset().top - $("header").outerHeight(!0)), t.length) $(n).on("scroll", function () {
            r()
        })
    };
    n.servicePicker = t.exports
}(this, {});
! function (n, t) {
    t.exports = function () {
        function i() {
            $(n).scrollTop() >= t ? $(".wa-calcEstimate").css({
                position: "fixed",
                top: "195px"
            }) : $(".wa-calcEstimate").css({
                position: "absolute",
                top: "auto"
            })
        }
        var t = $(".fixed-picker-position").offset().top - $("header").outerHeight(!0);
        $(n).on("scroll", function () {
            i()
        });
        $("body").on("click", ".discounts-toggler", function () {
            $(this).parent().toggleClass("expanded");
            $(".discounts-content").slideToggle()
        })
    };
    n.shoppingCart = t.exports
}(this, {});
! function (n, t) {
    t.exports = function (n) {
        for (var t, i = Array.prototype.slice.call(arguments, 1); n.length > 1 && i.length;) t = n, n = t.filter(i.shift());
        return n.length ? n : t
    };
    n.successiveFilter = t.exports
}(this, {});
Acom.Calculator.Actions.modules = Reflux.createActions(["register"]);
Acom.Calculator.Actions.instances = Reflux.createActions(["create", "edit", "remove", "set", "clear"]);
Acom.Calculator.Actions.channelCalculator = Reflux.createActions(["setDiscount", "setEstimateName", "setEstimatePartnerMarkup", "enableChannelCalculator", "loadEstimate", "saveEstimate", "saveTemplate", "setTemplateName", "setTemplateDescription", "setTemplateTags"]);
Acom.Calculator.Actions.templates = Reflux.createActions(["loadTemplate", "saveAsTemplate", ]);
Acom.Calculator.Actions.setSupportLevel = Reflux.createAction();
Acom.Calculator.Actions.userPreferences = Reflux.createActions(["setCulture", "setCurrency"]);
! function () {
    Acom.Calculator.Stores.armTemplates = Reflux.createStore({
        listenables: [Acom.Calculator.Actions.armTemplates],
        loadTemplate: function (n) {
            var t = "/api/v1/calculator/armtemplates/" + n + "/";
            return $.ajax({
                url: t,
                type: "GET",
                dataType: "json",
                contentType: "application/json"
            })
        }
    })
}();
! function () {
    Acom.Calculator.Stores.estimates = Reflux.createStore({
        saveEstimate: function (n) {
            var t = "/pricing/calculator/estimates/",
                i = "POST",
                r = $('#calculator-container + input[name="__RequestVerificationToken"]').val(),
                u = {
                    __RequestVerificationToken: r,
                    estimate: JSON.stringify(n)
                };
            return n.id && (t += n.id + "/", i = "PUT"), $.ajax({
                url: t,
                data: u,
                type: i
            })
        },
        loadEstimate: function (n) {
            var t = "/api/v1/pricing/calculator/estimates/" + n + "/";
            return $.ajax({
                url: t,
                type: "GET",
                dataType: "json",
                contentType: "application/json"
            })
        }
    })
}();
! function () {
    function i(t, i) {
        for (var r = 0; r < n.length; r++)
            if (n[r] && n[r] === t) return i(n[r], r, n), !0;
        return !1
    }
    var n = [],
        t = {
            level: "free",
            price: 0,
            prices: {
                free: 0,
                developer: 29,
                standard: 300,
                professional: 1e3
            }
        };
    Acom.Calculator.Stores.instances = Reflux.createStore({
        listenables: [Acom.Calculator.Actions.instances],
        init: function () {
            var n = this;
            n.listenTo(Acom.Calculator.Actions.setSupportLevel, function (i) {
                t.level = i;
                t.price = t.prices[i];
                n.output()
            })
        },
        getInitialState: function () {
            return {
                instances: n.map(function (n) {
                    return n.getInitialState()
                }),
                support: clone(t)
            }
        },
        onCreate: function (n) {
            this.createInstance(n);
            this.output()
        },
        onRemove: function (n) {
            this.removeInstance(n) && this.output()
        },
        onClear: function () {
            n = [];
            this.output()
        },
        onSet: function (t, i) {
            if (Array.isArray(t)) {
                var r = this,
                    u = t.map(function (n) {
                        return n.slug
                    });
                Acom.Calculator.Stores.modules.waitFor(u, function () {
                    n.forEach(r.removeInstance, r);
                    t.forEach(r.createInstance, r);
                    r.output()
                })
            }
            typeof i == "function" && i()
        },
        createInstance: function (t) {
            var i, u, r;
            Object(t) === t && (i = t, t = i.slug);
            u = Acom.Calculator.Stores.modules.getModule(t);
            r = u.createInstance(i);
            n.push(r);
            this.listenTo(r, this.output)
        },
        removeInstance: function (n) {
            var t = this;
            return i(n, function (n, i, r) {
                n.stopListeningTo(n.module.getPricingApiStore());
                n.module.hasOwnProperty("getSecondaryPricingApiStore") && n.stopListeningTo(n.module.getSecondaryPricingApiStore());
                t.stopListeningTo(n);
                r.splice(i, 1)
            })
        },
        output: function () {
            this.trigger(this.getInitialState());
            for (var t in n) n[t].module.shouldDisplay || Acom.Calculator.Stores.modules.setServiceAvailability(n[t].module.slug, !1)
        }
    })
}();
! function () {
    function n(n, t) {
        return t.every(function (t) {
            return n[t]
        })
    }
    Acom.Calculator.Stores.modules = Reflux.createStore({
        listenables: [Acom.Calculator.Actions.modules],
        notAvailableMessages: {},
        init: function () {
            this.modules = {};
            this.availableModules = [];
            this.channels = []
        },
        onRegister: function (n) {
            if (this.modules[n.slug]) throw new Error("Module `{" + n.slug + "}` already defined.");
            if (!this.availableModules.length || this.availableModules.indexOf(n.slug) !== -1) {
                if (this.modules[n.slug] = extend(n, {
                        shouldDisplay: !0
                    }), this.channels.length > 0) {
                    var t = this.channels[0].Services.indexOf(n.slug) > -1;
                    this.setModuleAvailability(this.modules[n.slug], t);
                    this.setServiceAvailability(n.slug, t)
                }
                this.trigger(this.modules)
            }
        },
        getModule: function (n) {
            var t = this.modules[n];
            if (!t) throw new Error(formatString("Unknown module `{0}`", n));
            return t
        },
        getModulesForCategory: function (n) {
            for (var r = [], i = {
                    featured: ["app-service", "documentdb", "hdinsight", "sql-database", "storage", "virtual-machines"],
                    compute: ["virtual-machines", "virtual-machine-scale-sets", "container-service", "functions", "batch", "service-fabric", "cloud-services", "remoteapp", "container-registry"],
                    storage: ["storage", "data-lake-store", "storsimple", "backup", "site-recovery"],
                    "web-mobile": ["app-service", "cdn", "media-services", "search", "mobile-engagement", "api-management", "notification-hubs"],
                    databases: ["sql-database", "sql-data-warehouse", "sql-server-stretch-database", "documentdb", "storage", "redis-cache", "data-factory"],
                    "intelligence-analytics": ["hdinsight", "machine-learning", "stream-analytics", "cognitive-services", "data-lake-analytics", "data-lake-store", "data-factory", "data-catalog", "power-bi-embedded", "analysis-services", "customer-insights"],
                    iot: ["iot-hub", "event-hubs", "stream-analytics", "machine-learning", "notification-hubs"],
                    networking: ["data-transfers", "ip-addresses", "application-gateway", "vpn-gateway", "dns", "cdn", "traffic-manager", "expressroute", "network-watcher"],
                    "enterprise-integration": ["logic-apps", "service-bus", "api-management", "storsimple", "sql-server-stretch-database", "data-factory", "data-catalog"],
                    "security-identity": ["security-center", "key-vault", "active-directory", "active-directory-b2c"],
                    "developer-tools": ["visual-studio-team-services", "application-insights", "api-management", "hockeyapp"],
                    "monitoring-management": ["application-insights", "log-analytics", "automation", "backup", "site-recovery", "scheduler", "traffic-manager", "monitor", "network-watcher"]
                }, t = 0; t < i[n].length; t++) this.modules[i[n][t]] && r.push(this.modules[i[n][t]]);
            return r
        },
        waitFor: function (t, i) {
            if (n(this.modules, t)) i(this.modules);
            else var r = this.listen(function (u) {
                n(u, t) && (i(u), r())
            })
        },
        setAvailableModules: function (n) {
            if (Array.isArray(n)) {
                this.availableModules = n;
                for (key in this.modules) this.availableModules.indexOf(key) === -1 ? (this.modules[key].shouldDisplay = !1, this.setModuleAvailability(this.modules[key], !1), this.setServiceAvailability(key, !1)) : (this.modules[key].shouldDisplay = !0, this.setModuleAvailability(this.modules[key], !0), this.setServiceAvailability(key, !0));
                this.trigger(this.modules)
            }
        },
        setModuleAvailability: function (n, t) {
            var i = " (" + this.getNotAvailableMessage(n.slug) + ")";
            t ? n.displayName.indexOf(i) !== -1 && (n.displayName = n.displayName.replace(i, "")) : n.displayName.indexOf(i) === -1 && (n.displayName = n.displayName + i)
        },
        setServiceAvailability: function (n, t) {
            var i = $(".wa-calcService." + n),
                r = "#not-available-service";
            i.length && (t ? i.children(r).remove() : (i.children(r).remove(), i.append(this.getChannelFilterMessage(n))))
        },
        setNotAvailableMessages: function (n) {
            this.notAvailableMessages = n
        },
        getChannelFilterMessage: function (n) {
            return "<div class='not-available' id='not-available-service'><span>" + this.getNotAvailableMessage(n) + "<\/span><\/div>"
        },
        setServicesPerChannel: function (n) {
            Array.isArray(n) && (this.channels = n)
        },
        setAvailableModulesBySlug: function (n) {
            if (this.channels) {
                n || (n = "direct");
                for (x in this.channels)
                    if (n.indexOf(this.channels[x].Slug) > -1) {
                        this.setAvailableModules(this.channels[x].Services);
                        break
                    }
            }
        },
        getNotAvailableMessage: function (n) {
            return this.notAvailableMessages[n] ? this.notAvailableMessages[n] : this.notAvailableMessages["default"]
        }
    })
}();
! function () {
    var n = [];
    Acom.Calculator.Stores.regions = Reflux.createStore({
        init: function () {
            var t = this;
            $.getJSON("/api/v1/regions/").done(function (i) {
                n = i.regions;
                t.output()
            })
        },
        getInitialState: function () {
            return {
                regions: n
            }
        },
        output: function () {
            this.trigger(this.getInitialState())
        }
    })
}();
! function () {
    Acom.Calculator.Stores.templates = Reflux.createStore({
        listenables: [Acom.Calculator.Actions.templates],
        loadTemplate: function (n) {
            var t = "/api/v1/templates/" + n + "/";
            return $.ajax({
                url: t,
                type: "GET",
                dataType: "json",
                contentType: "application/json"
            })
        },
        saveAsTemplate: function (n) {
            var t = $('#calculator-container + input[name="__RequestVerificationToken"]').val(),
                i = {
                    __RequestVerificationToken: t,
                    template: JSON.stringify(n)
                };
            return $.ajax({
                url: "/templates/",
                data: i,
                type: "POST"
            })
        }
    })
}();
! function () {
    function e(n) {
        return !!~f.indexOf(n)
    }

    function o(n) {
        var i = {},
            t;
        for (t in n) typeof n[t] != "function" && t !== "dataStore" && (i[t] = n[t]);
        return i
    }

    function s() {
        $(".wa-notificationOverlay").fadeIn();
        $(".wa-expiredNotification").stop().animate({
            bottom: "0"
        }, 500);
        $(".wa-expiredNotification").on("click", function () {
            location.reload()
        })
    }

    function i(n, t) {
        return $(n).fadeIn().delay(2e3).fadeOut(400, t)
    }

    function r() {
        var f = this,
            i = {},
            r = [];
        return n.estimate.id && (i.id = n.estimate.id), i.estimateTimestamp = n.estimate.timestamp || (new Date).toISOString(), i.name = n.estimate.name, i.priceLevelId = n.estimate.selectedDiscount, i.total = 0, i.markupValue = n.estimate.markupValue, i.instances = [], r = u.map(o), r.forEach(function (n) {
            i.total += n.price;
            i.instances.push(extend(n, {
                name: n.displayName,
                total: n.price,
                serviceSlug: n.slug
            }))
        }), i.markupValue && (i.total += i.total * i.markupValue / 100), i.support = {
            level: t.level,
            total: t.price
        }, i.total += t.price, i
    }

    function h() {
        var t = r();
        return t.name = n.template.name, t.description = n.template.description, t.tags = n.template.tags.split(/\s*,\s*/), t
    }
    var n = {
            estimate: {
                name: "",
                selectedDiscount: "",
                isSaving: !1,
                markupValue: 0
            },
            template: {
                name: "",
                description: "",
                tags: "",
                isSaving: !1
            },
            availableDiscounts: [],
            isChannelCalcEnabled: !1,
            displaySaveTemplate: !1,
            hasEARegion: !1
        },
        u = [],
        t = {},
        f = [];
    Acom.Calculator.Stores.channelCalculator = Reflux.createStore({
        listenables: [Acom.Calculator.Actions.channelCalculator],
        init: function () {
            this.listenTo(Acom.Calculator.Stores.instances, function (i) {
                u = i.instances;
                t = i.support;
                n.hasEARegion = i.instances.some(function (n) {
                    return e(n.region)
                });
                this.output()
            });
            this.listenTo(Acom.Calculator.Stores.regions, function (n) {
                f = n.regions.filter(function (n) {
                    return n.isEa || n.isGovernment
                }).map(function (n) {
                    return n.id
                })
            })
        },
        getInitialState: function () {
            return clone(n)
        },
        onSetDiscount: function (t) {
            n.estimate.selectedDiscount = t;
            Acom.Calculator.Stores.modules.setAvailableModulesBySlug(t);
            this.output()
        },
        onSetEstimateName: function (t) {
            n.estimate.name = t;
            this.output()
        },
        onSetEstimatePartnerMarkup: function (t) {
            n.estimate.markupValue = t;
            this.output()
        },
        onSetTemplateName: function (t) {
            n.template.name = t
        },
        onSetTemplateDescription: function (t) {
            n.template.description = t
        },
        onSetTemplateTags: function (t) {
            n.template.tags = t
        },
        onEnableChannelCalculator: function (t) {
            var i = this;
            t && ($.ajaxSetup({
                statusCode: {
                    401: function () {
                        s()
                    }
                }
            }), $.getJSON("/api/v1/pricing/discounts/").done(function (t) {
                if (n.isChannelCalcEnabled = !0, n.availableDiscounts = t.filter(function (n) {
                        return n.slug !== "open"
                    }), n.availableDiscounts.length > 0) {
                    var r = $.map(n.availableDiscounts, function (n) {
                            return n.slug
                        }),
                        u = localStorage.getItem("calculator.discount-level") || "web-direct";
                    r.indexOf(u) < 0 && (u = r.length > 1 ? r[1] : r[0]);
                    Acom.Calculator.Actions.channelCalculator.setDiscount(u);
                    Acom.Calculator.Stores.channelCalculator.loadInitialModules()
                }
                i.output()
            }))
        },
        onLoadEstimate: function (t, i) {
            var u = this,
                r;
            Acom.Calculator.Stores.estimates.loadEstimate(t).done(function (t) {
                r = t;
                n.estimate.id = r.id;
                n.estimate.timestamp = r.estimateTimestamp;
                Acom.Calculator.Actions.channelCalculator.setEstimateName(r.name);
                Acom.Calculator.Actions.channelCalculator.setDiscount(r.priceLevelId);
                Acom.Calculator.Actions.channelCalculator.setEstimatePartnerMarkup(r.markupValue);
                Acom.Calculator.Actions.setSupportLevel(r.support.level);
                typeof i == "function" && i(r.instances);
                u.output()
            })
        },
        onSaveEstimate: function () {
            var u = this,
                t;
            n.estimate.name && (n.estimate.isSaving = !0, u.output(), t = r(), Acom.Calculator.Stores.estimates.saveEstimate(t).done(function (r) {
                r && r.id && (n.estimate.id = r.id, n.estimate.timestamp = t.estimateTimestamp);
                try {
                    localStorage.setItem(Acom.Calculator.Stores.channelCalculator.storageUpdatedKey, JSON.stringify({
                        estimateId: n.estimate.id,
                        value: !1
                    }))
                } catch (u) {}
                i("#wa-calcSuccessfulSave")
            }).fail(function () {
                i("#wa-calcErrorSave")
            }).always(function () {
                n.estimate.isSaving = !1;
                u.output()
            }))
        },
        onSaveTemplate: function () {
            var t = this,
                r;
            r = h();
            n.template.isSaving = !0;
            n.displaySaveTemplate = !0;
            t.output();
            Acom.Calculator.Stores.templates.saveAsTemplate(r).done(function () {
                i("#wa-templateSuccessfulSave", function () {
                    n.displaySaveTemplate = !1;
                    n.template.isSaving = !1;
                    t.output()
                })
            }).fail(function () {
                i("#wa-templateErrorSave", function () {
                    n.displaySaveTemplate = !0;
                    n.template.isSaving = !1;
                    t.output()
                })
            })
        },
        output: function () {
            this.trigger(this.getInitialState())
        },
        currentDiscount: function () {
            return n.estimate.selectedDiscount
        },
        isChannelCalcEnabled: function () {
            return n.isChannelCalcEnabled
        },
        getSerializedEstimate: function () {
            return r()
        }
    })
}();
! function () {
    "use strict";
    Acom.Calculator.Stores.userPreferences = Reflux.createStore({
        listenables: [Acom.Calculator.Actions.userPreferences],
        init: function () {
            this.setCulture(Acom.currentCulture);
            this.currency = {
                name: "usd",
                locale: "en-us",
                conversion: 1
            }
        },
        getInitialState: function () {
            return {
                culture: this.culture,
                currency: this.currency.name
            }
        },
        setCulture: function (n) {
            this.culture = n.toLowerCase()
        },
        onSetCulture: function (n) {
            this.setCulture(n);
            this.output()
        },
        setCurrency: function (n) {
            this.currency = window.rawCurrencyData[n.toLowerCase()]
        },
        onSetCurrency: function (n) {
            this.setCurrency(n);
            this.output()
        },
        output: function () {
            this.trigger(this.getInitialState())
        },
        convertCurrency: function (n) {
            return n * this.currency.conversion
        }
    })
}();
$(window).on("globalInitComplete changedCurrency", function () {
    Acom.Calculator.Actions.userPreferences.setCurrency(window.pricingCurrency)
});
! function () {
    function b(n) {
        var i = {},
            t;
        for (t in n) typeof n[t] != "function" && t !== "dataStore" && t !== "displayName" && (i[t] = n[t]);
        return i
    }

    function h() {
        var t = [],
            n;
        try {
            n = JSON.parse(localStorage.getItem(Acom.Calculator.LOCAL_STORAGE_KEY));
            Object(n) === n && (t = n)
        } catch (i) {} finally {
            return t
        }
    }

    function r(n) {
        try {
            localStorage.setItem(Acom.Calculator.LOCAL_STORAGE_KEY, JSON.stringify(n))
        } catch (t) {}
    }

    function c(n) {
        try {
            localStorage.setItem(o, JSON.stringify({
                estimateId: Acom.Calculator.Stores.channelCalculator.estimateId,
                value: n
            }))
        } catch (t) {}
    }

    function k() {
        var n = null;
        try {
            n = JSON.parse(localStorage.getItem(o))
        } catch (t) {} finally {
            return n
        }
    }

    function d() {
        $(".wa-notificationOverlay").fadeIn();
        $(".wa-loadCalculator").stop().animate({
            bottom: "0"
        }, 500);
        $("#loadCalculatorOverwrite").on("click", function (n) {
            n.preventDefault();
            l(!0);
            u()
        });
        $("#loadCalculatorAppend").on("click", function (n) {
            n.preventDefault();
            l(!1);
            u()
        });
        $("#loadCalculatorCancel").on("click", function (t) {
            t.preventDefault();
            n();
            u()
        })
    }

    function g(t) {
        $(".wa-notificationOverlay").fadeIn();
        $(".wa-loadCalculator").stop().animate({
            bottom: "0"
        }, 500);
        $("#loadCalculatorMessage").text(v);
        $("#loadCalculatorOverwrite").text(y);
        $("#loadCalculatorOverwrite").on("click", function (i) {
            i.preventDefault();
            r([]);
            n(t);
            c(!1);
            u()
        });
        $("#loadCalculatorAppend").hide();
        $("#loadCalculatorCancel").on("click", function (t) {
            t.preventDefault();
            n();
            u()
        })
    }

    function u() {
        $(".wa-notificationOverlay").fadeOut();
        $(".wa-loadCalculator").stop().animate({
            bottom: "-67px"
        }, 500)
    }

    function e() {
        $(".wa-notificationOverlay").fadeIn();
        $(".wa-templateNotFound").stop().animate({
            bottom: "0"
        }, 500);
        $("#wa-templateNotFoundClose").on("click", function (t) {
            t.preventDefault();
            n();
            nt()
        })
    }

    function nt() {
        $(".wa-notificationOverlay").fadeOut();
        $(".wa-templateNotFound").stop().animate({
            bottom: "-67px"
        }, 500)
    }

    function l(t) {
        t && (Acom.Calculator.Actions.channelCalculator.setEstimateName(i.name), Acom.Calculator.Actions.setSupportLevel(i.support.level), r([]));
        n(i.instances)
    }

    function n(n) {
        var i = h(),
            u, r, f;
        if (n && n.length > 0 && (i = i.concat(n)), p = i.length, i.length)
            for (Acom.Calculator.Actions.instances.set(i.map(Acom.Calculator.normalizeInstanceSchema), w), u = 0; u < i.length; u++)
                for (r = 0; r < t.length; r++) i[u].slug === t[r] && t.splice(r, 1);
        else w();
        f = Acom.Calculator.Stores.modules.listen(function (n) {
            var i = t.every(function (t) {
                return n[t]
            });
            i && (f(), t.forEach(Acom.Calculator.Actions.instances.create))
        })
    }

    function w() {
        Acom.Calculator.Stores.instances.listen(function (n) {
            a++;
            r(n.instances.map(b));
            Acom.Calculator.Stores.channelCalculator.estimateId && a > p && c(!0)
        })
    }

    function tt(t) {
        var i = k();
        i && i.estimateId === Acom.Calculator.Stores.channelCalculator.estimateId && !!i.value ? g(t) : (r([]), n(t), c(!1))
    }

    function it() {
        return Acom.Calculator.Stores.channelCalculator.estimateId ? Acom.Calculator.Actions.channelCalculator.loadEstimate(Acom.Calculator.Stores.channelCalculator.estimateId, tt) : s ? Acom.Calculator.Stores.templates.loadTemplate(s).done(function (n) {
            if (n && n.instances) {
                i = n;
                var t = h();
                t.length ? d() : l(!0)
            } else e()
        }).fail(e) : f ? Acom.Calculator.Stores.armTemplates.loadTemplate(f).done(function (t) {
            t && t.instances ? (i = t, r([]), n(i.instances)) : e()
        }).fail(e) : n(), React.render(React.createElement(Calculator, {
            isArmTemplate: !!f
        }), $(Acom.Calculator.Stores.channelCalculator.selector || "#calculator-container")[0])
    }
    var t = [],
        o = "acomuser.storage-updated",
        a = 0,
        i, s, f, v, y, p;
    window.initializeCalculator = function (n, i) {
        var l = h(),
            r = RegExp("[?&]id=([^&]*)").exec(window.location.search),
            c = r && decodeURIComponent(r[1].replace(/\+/g, " ")),
            u = RegExp("[?&]template=([^&]*)").exec(window.location.search),
            e = RegExp("[?&]armtemplate=([^&]*)").exec(window.location.search.toLowerCase());
        s = u && decodeURIComponent(u[1].replace(/\+/g, " "));
        f = e && decodeURIComponent(e[1].replace(/\+/g, " "));
        t = n.initialServices;
        v = n.estimateUnsavedMessage;
        y = n.estimateOverrideLinkText;
        Acom.Calculator.Stores.channelCalculator.templateSaver = n.templateSaver;
        Acom.Calculator.Stores.channelCalculator.invitationSender = n.invitationSender;
        Acom.Calculator.Stores.channelCalculator.selector = i;
        Acom.Calculator.Stores.channelCalculator.estimateId = c;
        Acom.Calculator.Stores.channelCalculator.loadInitialModules = it;
        Acom.Calculator.Stores.channelCalculator.storageUpdatedKey = o;
        Acom.Calculator.Actions.channelCalculator.enableChannelCalculator(n.enableChannelCalculator);
        Acom.Calculator.Stores.modules.setNotAvailableMessages(n.notAvailableMessages);
        n.availableServices && Acom.Calculator.Stores.modules.setServicesPerChannel(n.availableServices);
        n.enableChannelCalculator || Acom.Calculator.Stores.channelCalculator.loadInitialModules()
    };
    Acom.Calculator.LOCAL_STORAGE_KEY = "calculator.servicesv3"
}(),
function (n, t, i) {
    "use strict";

    function g(t) {
        t.preventDefault();
        n(".button-yes-content").hide();
        n(".button-no-content").show();
        v.val(!1);
        p()
    }

    function nt(t) {
        t.preventDefault();
        n(".button-yes-content").show();
        n(".button-no-content").hide();
        v.val(!0);
        p()
    }

    function p() {
        h.show();
        f.hide();
        u.hide()
    }

    function tt() {
        var n = this.value.length;
        n > s ? o.addClass("error") : o.removeClass("error");
        c.text(s - n)
    }

    function it() {
        i.getFormData("calc-clicked-feedback", e.val());
        e.val("");
        a.delay(4e3).fadeOut(400, function () {
            l.show();
            f.show();
            u.show()
        })
    }
    var h = n("#details"),
        u = n("#button-yes"),
        f = n("#button-no"),
        e = n("#comment"),
        o = n("#comment-count"),
        c = o.find("span"),
        s = parseInt(c.data("max"), 10),
        r = n("#feedback-calculator"),
        l = n("#feedback-message"),
        a = n("#feedback-thanks"),
        v = n("#helpful"),
        w = n("#instances"),
        b = n("#total"),
        k = n("#version"),
        d = n("#user-currency"),
        y = Acom.Calculator.LOCAL_STORAGE_KEY;
    r.on("submit", function (i) {
        i.preventDefault();
        i.stopImmediatePropagation();
        w.val(localStorage.getItem(y) || "[]");
        b.val(n(".wa-calcEstimate .numeric").text());
        k.val(y);
        d.val(t.pricingCurrency);
        r.validate({
            rules: {
                comment: {
                    maxlength: s
                }
            }
        });
        r.valid() && (h.hide(), l.hide(), a.show(), n.ajax({
            url: i.target.action,
            method: "POST",
            data: r.serialize(),
            contentType: "application/x-www-form-urlencoded",
            success: it
        }))
    });
    e.on("input", tt);
    u.on("click", nt);
    f.on("click", g)
}(jQuery, window, window.sd.analytics);
! function () {
    function n(n, t) {
        var r = t || this.state,
            i = n || this.props,
            u = i.format === "currency" ? r.currency : i.format;
        this.format = getNumberFormat(r.culture, i.decimals, u)
    }
    Acom.Atoms.Number = React.createClass({
        displayName: "Number",
        mixins: [Reflux.connect(Acom.Calculator.Stores.userPreferences)],
        componentWillMount: n,
        componentWillUpdate: n,
        shouldComponentUpdate: function (n, t) {
            var i = this.props,
                r = this.state;
            return i.value !== n.value || r.currency !== t.currency || i.decimals !== n.decimals || i.format !== n.format || r.culture !== t.culture
        },
        render: function () {
            var t = this.props,
                n = t.value;
            return t.format === "currency" && (n = Acom.Calculator.Stores.userPreferences.convertCurrency(n)), React.createElement("span", null, this.format(n))
        }
    })
}();
Acom.Atoms.SelectorButton = React.createClass({
    displayName: "SelectorButton",
    render: function () {
        var n = this.props,
            t = ["wa-selectorator"];
        return n.defaultChecked && t.push("active"), React.createElement("label", {
            className: t.join(" ")
        }, React.createElement("input", React.__spread({}, n, {
            type: "radio"
        })))
    }
});
Acom.Atoms.ServiceInfo = React.createClass({
    displayName: "ServiceInfo",
    render: function () {
        var n = this.props,
            t = ["wa-serviceInfo", "clearfix"];
        return n.isSelected && t.push("active"), React.createElement("div", {
            className: t.join(" ")
        }, React.createElement("span", {
            className: "icon",
            title: n.displayName,
            dangerouslySetInnerHTML: n.icon
        }), React.createElement("div", null, React.createElement("b", null, n.displayName), React.createElement("span", null, n.description)))
    }
});
Tooltip = React.createClass({
    displayName: "Tooltip",
    mixins: [DocClickMixin],
    onDocClick: function () {
        this.setState({
            isOpen: !1
        })
    },
    onClick: function (n) {
        this.setState({
            isOpen: !this.state.isOpen
        });
        n.preventDefault()
    },
    onChildClick: function (n) {
        n.stopPropagation()
    },
    getInitialState: function () {
        return {
            isOpen: !1
        }
    },
    shouldComponentUpdate: function (n, t) {
        var u = this.state,
            r = this.props.children,
            f = n.children;
        if (u.isOpen !== t.isOpen || r.length !== f.length) return !0;
        if (u.isOpen)
            for (i = 0; i < r.length; i++)
                if (r[i] !== f[i]) return !0;
        return !1
    },
    render: function () {
        var n = this.props,
            t = ["wa-tooltip"],
            i = React.createElement("svg", {
                x: "0px",
                y: "0px",
                width: "16px",
                height: "16px",
                viewBox: "0 0 9 9",
                "enable-background": "new 0 0 9 9"
            }, React.createElement("circle", {
                fill: "#0372B0",
                cx: "4.5",
                cy: "4.5",
                r: "4.5"
            }), React.createElement("circle", {
                fill: "#FFFFFF",
                cx: "4.5",
                cy: "2.315",
                r: "0.815"
            }), React.createElement("polygon", {
                fill: "#FFFFFF",
                points: "4.378,7.5 4.622,7.5 5.231,7.5 5.231,3.93 4.622,3.93 4.378,3.93 3.776,3.93 3.769,7.5 "
            }));
        return n.className === "pricing-details-link" && t.push(n.className), this.state.isOpen && t.push("active"), n.toggleLabel && (i = React.createElement("a", {
            href: "#"
        }, n.toggleLabel), t.push("top")), React.createElement("div", React.__spread({}, n, {
            className: t.join(" "),
            onClick: this.onClick
        }), i, React.createElement("div", {
            onClick: this.onChildClick
        }, n.children))
    }
});
! function (n, t) {
    t.exports = React.createClass({
        displayName: "exports",
        render: function () {
            var n = this.props,
                u = n.options.map(function (n) {
                    var t = n.disabled ? !0 : !1;
                    return React.createElement("option", {
                        key: n.slug,
                        value: n.slug,
                        disabled: n.disabled
                    }, n.displayName)
                }),
                f = n.options.filter(function (t) {
                    return n.defaultValue == t.slug
                }).map(function (n) {
                    return n.displayName
                })[0],
                r = ["select"],
                i = [],
                t;
            if (n.classes)
                for (i = n.classes.split(" "), t = 0; t < i.length; t++) r.push(i[t]);
            return React.createElement("div", null, displayIf(n.label && n.label.length, React.createElement("label", {
                className: "dropdown-label",
                htmlFor: n.name
            }, n.label, ":")), React.createElement("select", React.__spread({}, n, {
                key: n.name + n.defaultValue,
                className: r.join(" ")
            }), u), n.children, displayIf(n.name === "region" && n.defaultValue.indexOf("gov") !== -1, React.createElement("div", {
                className: "government-note"
            }, formatReact('<strong>NOTE:<\/strong> Azure Government is available for US government entities through purchase from a licensed Azure Government License Service provider or Partner. <a href="{0}">Learn more<\/a> or sign up for a free <a href="{1}">Azure Government trial<\/a>.', "/en-us/overview/clouds/government/", "https://azuregov.microsoft.com/trial/azuregovtrial"))), displayIf(n.name === "region" && n.defaultValue.indexOf("germany") !== -1, React.createElement("div", {
                className: "government-note"
            }, formatReact("<strong>NOTE:<\/strong> Azure Germany is available to customers and partners in the European Union (EU) and European Free Trade Association (EFTA) and provides data residency in Germany with additional levels of control and data protection with a modest price uplift over global cloud offerings (% varies per service)."))))
        }
    });
    n.CalculatorDropdown = t.exports
}(this || module.exports, {});
! function (n, t) {
    "use strict";
    t.exports = React.createClass({
        displayName: "exports",
        render: function () {
            var n = this.props,
                t = ["wa-checkbox", "wa-checkbox-large"];
            return n.defaultChecked && t.push("checked"), React.createElement("div", {
                className: t.join(" ")
            }, React.createElement("label", null, n.label, React.createElement("input", React.__spread({}, n, {
                type: "checkbox"
            }))))
        }
    });
    n.Checkbox = t.exports
}(this || module.exports, {});
! function (n, t) {
    t.exports = React.createClass({
        displayName: "exports",
        render: function () {
            var t = n.resolvedCurrencyList,
                i = $("#dropdown-currency select").val();
            return options = t.map(function (n) {
                return React.createElement("option", {
                    key: n.slug,
                    value: n.slug
                }, n.displayName)
            }), React.createElement("div", null, React.createElement("select", {
                defaultValue: i,
                key: t.name + t.defaultValue,
                className: "select currency-dropdown"
            }, options))
        }
    });
    n.CurrencyDropdown = t.exports
}(this, {});
! function (n, t) {
    function i(n, t) {
        var i = t || this.state,
            r = n || this.props,
            u = i.currency
    }
    t.exports = React.createClass({
        displayName: "exports",
        mixins: [Reflux.connect(Acom.Calculator.Stores.userPreferences)],
        componentWillMount: i,
        componentWillUpdate: i,
        shouldComponentUpdate: function (n, t) {
            var i = this.props,
                r = this.state;
            return i.value !== n.value || r.currency !== t.currency || i.decimals !== n.decimals || i.format !== n.format || r.culture !== t.culture || this.state !== t
        },
        render: function () {
            var n = this.props,
                i, r = this.state,
                u = ["detailed-dropdown select"],
                t = [];
            if (i = n.options.map(function (t) {
                    var o = t.disabled ? !0 : !1,
                        e = t.values.number ? getNumberFormat(r.culture, t.values.number.decimals, r.currency) : null,
                        u = "",
                        f = {
                            colon: n.delimiters.indexOf("colon") > -1,
                            comma: n.delimiters.indexOf("comma") > -1,
                            pipe: n.delimiters.indexOf("pipe") > -1
                        },
                        i = 0;
                    for (i; i < t.values.displayStrings.length; i++) u += t.values.displayStrings[i], u += f.colon && i === 0 ? ": " : f.comma ? ", " : f.pipe ? " | " : " ";
                    return e && (u += formatString(t.values.number.rate, e(Acom.Calculator.Stores.userPreferences.convertCurrency(t.values.number.value)))), React.createElement("option", {
                        key: t.slug,
                        value: t.slug,
                        disabled: t.disabled
                    }, u)
                }), n.classes)
                for (t = n.classes.split(" "), j; j < t.length; j++) u.push(t[j]);
            return React.createElement("div", null, displayIf(n.label && n.label.length, React.createElement("label", {
                className: "dropdown-label",
                htmlFor: n.name
            }, n.label, ":")), React.createElement("select", React.__spread({}, n, {
                key: n.name + n.defaultValue,
                className: u.join(" ")
            }), i), n.children)
        }
    });
    n.DetailedDropdown = t.exports
}(this || module.exports, {});
! function (n, t) {
    t.exports = React.createClass({
        displayName: "exports",
        render: function () {
            var n = this.props,
                r, t, i;
            if (n.factorUnit === "minutes") {
                r = [{
                    slug: "1",
                    displayName: "Minutes"
                }, {
                    slug: "60",
                    displayName: "Hours"
                }].map(function (n) {
                    return {
                        slug: n.slug,
                        displayName: n.displayName
                    }
                });
                switch (n.factorsDefault) {
                    case "1":
                        t = 1;
                        i = 44640;
                        break;
                    case "60":
                        t = 1;
                        i = 744
                }
            } else if (n.factorUnit === "hours") {
                r = [{
                    slug: "1",
                    displayName: "Hours"
                }, {
                    slug: "24",
                    displayName: "Days"
                }, {
                    slug: "744",
                    displayName: "Months"
                }].map(function (n) {
                    return {
                        slug: n.slug,
                        displayName: n.displayName
                    }
                });
                switch (n.factorsDefault) {
                    case "1":
                        t = 1;
                        i = 744;
                        break;
                    case "24":
                        t = 1;
                        i = 31;
                        break;
                    case "744":
                        t = 1;
                        i = 1
                }
            } else n.factorUnit === "gbs" && (r = [{
                slug: "1",
                displayName: "GB"
            }, {
                slug: "1024",
                displayName: "TB"
            }].map(function (n) {
                return {
                    slug: n.slug,
                    displayName: n.displayName
                }
            }));
            return React.createElement("div", null, React.createElement(TextNumber, {
                "class": "factored-input",
                key: "factor-" + n.name,
                label: React.createElement(CalculatorDropdown, {
                    key: "factor-units-" + n.name,
                    className: "unit-selector",
                    name: n.factorsName,
                    options: r,
                    defaultValue: n.factorsDefault,
                    onChange: n.onChange
                }),
                name: n.name,
                min: t ? t : n.min,
                max: i ? i : n.max,
                defaultValue: n.defaultValue,
                onChange: n.onChange
            }))
        }
    });
    n.FactoredInput = t.exports
}(this, {});
! function (n, t) {
    function u(n) {
        n.preventDefault();
        i.acceptHandler(i.properties);
        r()
    }

    function f(n) {
        n.preventDefault();
        i.cancelHandler(i.properties);
        r()
    }

    function r() {
        $(".wa-modal-overlay").fadeOut();
        $(".wa-modal-options").stop(!0).animate({
            bottom: "-67px"
        }, 500)
    }
    var i;
    t.exports = React.createClass({
        displayName: "exports",
        componentDidMount: function () {
            i = this
        },
        render: function () {
            var n = this.props;
            return React.createElement("div", null, React.createElement("div", {
                className: "wa-modal-options"
            }, n.message, React.createElement("a", {
                className: "wa-modal-accept",
                href: "#",
                onClick: u
            }, n.accept), React.createElement("a", {
                className: "wa-modal-cancel",
                href: "#",
                onClick: f
            }, n.cancel)), React.createElement("div", {
                className: "wa-modal-overlay"
            }))
        },
        show: function (n, t, r) {
            i.properties = n;
            i.acceptHandler = t;
            i.cancelHandler = r || function () {};
            $(".wa-modal-overlay").fadeIn();
            $(".wa-modal-options").stop(!0).animate({
                bottom: "0"
            }, 500)
        }
    });
    n.ModalDialog = t.exports
}(this, {});
Acom.Molecules.Selector = React.createClass({
    displayName: "Selector",
    render: function () {
        var n = this.props;
        return React.createElement("ul", React.__spread({}, n, {
            key: n.defaultValue,
            className: "wa-selectorList"
        }), n.options.map(function (t) {
            return React.createElement("li", {
                "data-event": "calc-clicked-featurescategory",
                key: t.slug
            }, React.createElement(Acom.Atoms.SelectorButton, {
                name: n.name,
                value: t.slug,
                defaultChecked: n.defaultValue === t.slug
            }, t.displayName))
        }))
    }
});
! function (n, t) {
    "use strict";
    t.exports = React.createClass({
        displayName: "exports",
        render: function () {
            var n = this.props;
            return n.base || n.overage ? React.createElement("div", {
                className: "sku-under-total"
            }, displayIf(n.base, React.createElement("div", null, React.createElement("label", {
                className: "sku-label"
            }, "Base SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.base))), displayIf(n.overage, React.createElement("div", null, React.createElement("label", {
                className: "sku-label"
            }, "Overage SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.overage)))) : React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.value))
        }
    });
    n.SkuLabel = t.exports
}(this, {});
! function (n, t) {
    "use strict";
    t.exports = React.createClass({
        displayName: "exports",
        render: function () {
            var n = this.props;
            return React.createElement("div", null, React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    textAlign: "center",
                    width: "auto"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, n.value)), React.createElement("label", {
                className: "label"
            }, n.label))
        }
    });
    n.StaticNumber = t.exports
}(this, {});
! function (n, t) {
    "use strict";

    function i(n) {
        return parseInt(n, 10)
    }
    t.exports = React.createClass({
        displayName: "exports",
        updateValue: function (n, t) {
            var r = this.props,
                u = this.refs.input.getDOMNode();
            if (t = t ? +u.value + t : +u.value, t = Math.min(Math.max(t, r.min), r.max), t = (r.format || i)(t), t = isNaN(t) ? r.defaultValue : t, u.value != t && (u.value = "" + t), r.onChange) r.onChange(extend(n, {
                target: u
            }))
        },
        onIncrease: function (n) {
            n.preventDefault();
            var t = this.refs.input.getDOMNode();
            this.updateValue(n, 1)
        },
        onDecrease: function (n) {
            n.preventDefault();
            var t = this.refs.input.getDOMNode();
            this.updateValue(n, -1)
        },
        onKeyDown: function (n) {
            var i = 1,
                t = 0;
            switch (n.keyCode) {
                case 33:
                case 38:
                    t = 1;
                    break;
                case 34:
                case 40:
                    t = -1;
                    break;
                default:
                    return
            }(n.shiftKey || n.keyCode === 33 || n.keyCode === 34) && (i = 10);
            this.updateValue(n, t * i);
            n.preventDefault()
        },
        render: function () {
            var n = this.props,
                i = +n.defaultValue,
                t = ["number-holder"];
            return n.max > 999 && n.max <= 99999 && t.push("wide"), n.max > 99999 && n.max <= 999999999 && t.push("extra-wide"), n.max > 999999999 && t.push("widest"), n["class"] && t.push(n["class"]), React.createElement("div", {
                className: t.join(" ")
            }, React.createElement("div", {
                className: "wa-textNumber"
            }, React.createElement("input", React.__spread({}, n, {
                className: "text-input numeric",
                ref: "input",
                type: "number",
                onKeyDown: this.onKeyDown,
                onChange: this.updateValue,
                onClick: this.onClick
            }))), React.createElement("label", {
                htmlFor: "count",
                className: "label"
            }, n.label))
        }
    });
    n.TextNumber = t.exports
}(this, {});
! function (n, t) {
    t.exports = React.createClass({
        displayName: "exports",
        render: function () {
            var n = this.props,
                t = n.options.map(function (n) {
                    var t = n.disabled ? !0 : !1;
                    return React.createElement("option", {
                        key: n.slug,
                        value: n.slug,
                        disabled: n.disabled
                    }, n.displayName)
                }),
                i = n.options.filter(function (t) {
                    return n.defaultValue == t.slug
                }).map(function (n) {
                    return n.displayName
                })[0];
            return React.createElement("div", {
                className: "number-holder"
            }, React.createElement("div", {
                className: "xa-dropdown unit-dropdown"
            }, React.createElement("select", React.__spread({}, n, {
                key: n.name + n.defaultValue,
                className: "select"
            }), t), React.createElement("span", {
                className: "value"
            }, i), React.createElement("span", {
                className: "arrow"
            })), n.children, React.createElement("label", {
                className: "label",
                htmlFor: n.name
            }, n.label))
        }
    });
    n.UnitDropdown = t.exports
}(this, {});
! function () {
    "use strict";

    function u(t, i) {
        var r = n.getPricingApiStore().data;
        return r ? r.activeDirectoryDomainServices.offers[i].price[t] : undefined
    }

    function f(i) {
        var r = n.getPricingApiStore().data;
        return r ? t(i) ? i.dsHours * (i.dsHoursFactor || "1") * u(i.region, i.dsTier) : 0 : undefined
    }

    function e() {
        return 0
    }

    function o(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.activeDirectoryMFA.offers[t.mfaBillingTypes].price[t.region] : undefined
    }

    function s(t) {
        var i = n.getPricingApiStore().data,
            r;
        return i ? (r = t.mfaBillingTypes === "per-user" ? t.mfaUsers : Math.ceil(t.mfaAuthentications / 10), i.activeDirectoryMFA.offers[t.mfaBillingTypes].price[t.region] * r) : undefined
    }

    function t(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.activeDirectoryDomainServices.offers[t.dsTier].price[t.region] ? !0 : !1 : undefined
    }

    function h(n, t) {
        for (var i = 0; i < t.length; i++)
            if (t[i].slug == n) return t[i].displayName;
        return ""
    }
    var i = "Azure Active Directory",
        r, n;
    r = React.createClass({
        displayName: "ActiveDirectory",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var r = this.props,
                h = n.getPricingApiStore().data,
                c = h.activeDirectoryMFA.billings.map(function (n) {
                    var t;
                    switch (n.slug) {
                        case "per-user":
                            t = "Per user";
                            break;
                        case "per-authentication":
                            t = "Per authentication";
                            break;
                        case "per-user-annual-direct":
                            t = "Per user annual"
                    }
                    return {
                        slug: n.slug,
                        displayName: t
                    }
                });
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: r.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: i,
                defaultValue: r.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: h.regions,
                defaultValue: r.region
            }), React.createElement(CalculatorDropdown, {
                label: "Tier",
                name: "tier",
                options: h.activeDirectory.tiers,
                defaultValue: r.tier
            }))), React.createElement("div", {
                className: "cost no-divider"
            }, displayIf(r.tier === "free", React.createElement("p", {
                className: "total-note"
            }, "Includes 500k Directory Objects, SSO for SasS Apps 10 Apps/User"), React.createElement("p", {
                className: "total-note"
            }, formatReact('The Basic and Premium editions are available through a <a href="{0}">Microsoft Enterprise Agreement<\/a>, the <a href="{1}">Open Volume License Program<\/a>, and the <a href="{2}">Cloud Solution Providers<\/a> program. Azure and Office 365 subscribers can also buy Active Directory Premium online.', "https://www.microsoft.com/licensing/licensing-options/enterprise.aspx", "https://www.microsoft.com/licensing/licensing-options/open-license.aspx", "https://mspartner.microsoft.com/en/us/pages/solutions/cloud-reseller-overview.aspx"))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: e(r.region, r.tier),
                decimals: "2",
                format: "currency"
            }))), displayIf(r.displaySku && r.sku.ad, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, r.sku.ad))))), React.createElement("div", {
                className: "service-properties collapsible"
            }, React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Multi-Factor Authentication"), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Billing model",
                name: "mfaBillingTypes",
                options: c,
                defaultValue: r.mfaBillingTypes
            })), React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "Available as a stand-alone service with per user and per authentication billing options, or bundled with Azure Active Directory Premium and Enterprise Mobility Suite."), displayIf(r.mfaBillingTypes === "per-user", React.createElement(TextNumber, {
                key: "per-user",
                label: "Users",
                name: "mfaUsers",
                min: "0",
                max: "999999999",
                defaultValue: r.mfaUsers,
                onChange: this.onChange
            }), React.createElement(TextNumber, {
                key: "per-auth",
                label: "Authentications",
                name: "mfaAuthentications",
                min: "0",
                max: "999999999",
                defaultValue: r.mfaAuthentications,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "math"
            }, "×"), displayIf(r.mfaBillingTypes === "per-user", React.createElement(StaticNumber, {
                label: "Per user",
                value: React.createElement(Acom.Atoms.Number, {
                    value: o(r),
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement(StaticNumber, {
                label: "Per 10 authentications",
                value: React.createElement(Acom.Atoms.Number, {
                    value: o(r),
                    decimals: "2",
                    format: "currency"
                })
            })), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: s(r),
                decimals: "2",
                format: "currency"
            }))), displayIf(r.displaySku && r.sku.admfa, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, r.sku.admfa))))), displayIf(t(r), React.createElement("div", null, React.createElement("div", {
                className: "cost detail"
            }, React.createElement("h3", null, "Domain Services"), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Directory objects",
                name: "dsTier",
                options: h.activeDirectoryDomainServices.tiers,
                defaultValue: r.dsTier
            }))), React.createElement("div", {
                className: "cost sub-module no-divider"
            }, React.createElement(FactoredInput, {
                key: "factor-dsHours-" + r.dsHoursFactor,
                name: "dsHours",
                defaultValue: r.dsHours,
                factorsName: "dsHoursFactor",
                factorsDefault: r.dsHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per Hr",
                value: React.createElement(Acom.Atoms.Number, {
                    value: u(r.region, r.dsTier),
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f(r),
                decimals: "2",
                format: "currency"
            }))), displayIf(r.displaySku && r.sku.adds, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, r.sku.adds))))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Subtotal"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r.price,
                decimals: "2",
                format: "currency"
            })))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "active-directory",
        displayName: i,
        description: "Synchronize on-premises directories and enable single sign-on",
        pricingApi: "/api/v1/pricing/active-directory/calculator/",
        component: r,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="active-directory" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M25.001,50.001c-1.232,0-2.392-0.48-3.261-1.352L1.351,28.261C0.492,27.402,0,26.215,0,25 c0-1.214,0.492-2.402,1.351-3.26L21.74,1.352C22.611,0.48,23.769,0,25.001,0c1.231,0,2.39,0.48,3.261,1.352L48.648,21.74 C49.521,22.608,50,23.767,50,25c0,1.233-0.479,2.392-1.353,3.263L28.262,48.649C27.392,49.521,26.232,50.001,25.001,50.001"/> <path fill="#FFFFFF" d="M38.614,21.093c-2.16,0-3.91,1.75-3.91,3.909c0,0.792,0.239,1.527,0.645,2.143l-7.744,7.744 c-0.206-0.144-0.427-0.264-0.656-0.373V14.759c1.167-0.676,1.961-1.924,1.961-3.37C28.91,9.23,27.16,7.48,25,7.48 c-2.158,0-3.908,1.75-3.908,3.909c0,1.446,0.794,2.694,1.96,3.37v19.756c-0.219,0.104-0.434,0.216-0.632,0.353l-7.753-7.753 c0.394-0.61,0.628-1.333,0.628-2.113c0-2.159-1.75-3.909-3.908-3.909c-2.16,0-3.91,1.75-3.91,3.909s1.75,3.909,3.91,3.909 c0.448,0,0.872-0.091,1.274-0.23l8.15,8.15c-0.234,0.548-0.364,1.15-0.364,1.783c0,2.513,2.038,4.551,4.551,4.551 c2.514,0,4.551-2.038,4.551-4.551c0-0.621-0.126-1.212-0.351-1.751l8.173-8.172c0.392,0.132,0.804,0.22,1.241,0.22 c2.158,0,3.908-1.75,3.908-3.909S40.771,21.093,38.614,21.093z"/> <rect x="31.006" y="8.226" transform="matrix(-0.707 0.7072 -0.7072 -0.707 68.2099 8.8718)" opacity="0.5" fill="#FFFFFF" width="2.523" height="20.676"/> <rect x="16.487" y="8.242" transform="matrix(0.7071 0.7071 -0.7071 0.7071 18.3355 -7.1088)" opacity="0.5" fill="#FFFFFF" width="2.524" height="20.677"/> <path fill="#B8D432" d="M27.665,38.614c0,1.496-1.214,2.709-2.71,2.709c-1.497,0-2.709-1.213-2.709-2.709 c0-1.496,1.212-2.709,2.709-2.709C26.45,35.905,27.665,37.118,27.665,38.614"/> <path fill="#B8D432" d="M27.174,11.389c0,1.201-0.973,2.174-2.174,2.174c-1.201,0-2.174-0.973-2.174-2.174 c0-1.201,0.973-2.174,2.174-2.174C26.201,9.215,27.174,10.188,27.174,11.389"/> <path fill="#B8D432" d="M13.563,25.001c0,1.201-0.975,2.174-2.174,2.174c-1.201,0-2.174-0.973-2.174-2.174 c0-1.201,0.973-2.174,2.174-2.174C12.588,22.827,13.563,23.8,13.563,25.001"/> <path fill="#B8D432" d="M40.788,25.001c0,1.201-0.975,2.174-2.175,2.174c-1.2,0-2.174-0.973-2.174-2.174 c0-1.201,0.974-2.174,2.174-2.174C39.813,22.827,40.788,23.8,40.788,25.001"/> <path opacity="0.1" fill="#FFFFFF" d="M28.262,1.352C27.391,0.48,26.233,0,25.001,0c-1.231,0-2.389,0.48-3.26,1.352L1.352,21.74 C0.492,22.598,0,23.786,0,25c0,1.215,0.492,2.403,1.352,3.261l11.543,11.544L34.61,7.699L28.262,1.352z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#active-directory"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-west",
                tier: "free",
                users: 1,
                dsTier: "aad-ds-s2",
                dsTierString: "25001-100000",
                dsObjects: 5,
                dsHours: 0,
                dsHoursFactor: "1",
                dsAvailable: !0,
                mfaBillingTypes: "per-user",
                mfaUsers: 10,
                mfaAuthentications: 10
            }
        },
        getPrice: function (n) {
            return e(n.region, n.tier) + f(n) + s(n)
        },
        getDisplayName: function (n) {
            return n.name || i
        },
        willUpdate: function (i, r) {
            var u = n.getPricingApiStore().data;
            return r.dsAvailable = t(r), r.dsTierString = h(r.dsTier, u.activeDirectoryDomainServices.tiers), i.dsHoursFactor !== r.dsHoursFactor && (r.dsHours = factorInput(i.dsHoursFactor, r.dsHoursFactor, i.dsHours)), r
        },
        getSku: function (i) {
            var r = n.getPricingApiStore().data,
                u;
            return r ? (u = {
                ad: r.activeDirectory.offers[i.tier].skus[i.region],
                admfa: r.activeDirectoryMFA.offers[i.mfaBillingTypes].skus[i.region]
            }, t(i) && (u.adds = r.activeDirectoryDomainServices.offers[i.dsTier].skus[i.region]), u) : ""
        },
        getDescription: function (n) {
            var t = Core.Util.FormatString("{0} tier, {1} MFA billing model, {2} MFA user(s)", n.tier, n.mfaBillingTypes, n.mfaUsers);
            return n.dsAvailable && (t += Core.Util.FormatString(", {0} directory objects, {1} {2}", n.dsTierString, n.dsHours, factorLabel(n.dsHoursFactor))), t
        },
        isValidOffer: function (t) {
            var i = n.getPricingApiStore().data,
                r, u, f;
            return i ? (r = i.activeDirectory.offers[t.tier], u = i.activeDirectoryDomainServices.offers[t.dsTier], f = i.activeDirectoryMFA.offers[t.mfaBillingTypes], r && u && f ? !0 : void 0) : undefined
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function t(t) {
        var r = n.getPricingApiStore().data,
            i;
        return r ? (i = r.offers, i["stored-users-" + t.region] == undefined) ? {
            users: 0,
            authentications: 0,
            multiFactorAuthentications: 0,
            multiFactorAuthenticationsCost: 0
        } : {
            users: getGraduatedPrice(i["stored-users-" + t.region].prices, t.b2cUsers),
            authentications: getGraduatedPrice(i["authentications-users-" + t.region].prices, t.authentications),
            multiFactorAuthentications: getGraduatedPrice(i["multi-factor-authentication-users-" + t.region].prices, t.multiFactorAuthentications),
            multiFactorAuthenticationsCost: i["multi-factor-authentication-users-" + t.region].prices[0].price
        } : undefined
    }

    function u(i) {
        var r = n.getPricingApiStore().data;
        return r ? t(i).users + t(i).authentications + t(i).multiFactorAuthentications : undefined
    }
    var i = "Azure Active Directory B2C",
        r, n;
    r = React.createClass({
        displayName: "ActiveDirectoryB2C",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var r = this.props,
                u = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: r.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: i,
                defaultValue: r.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("p", null, "The B2C service is currently available free of charge. The service is generally available in all North America regions (United States and Canada regions). All tenants created in these regions will begin billing on February 1, 2017. Tenants in Europe and UK regions are still in Preview, and will remain free of charge until the service becomes generally available in those regions."), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: u.regions,
                defaultValue: r.region
            }))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h5", null, "Stored users"), displayIf(!Acom.Calculator.Stores.channelCalculator.isChannelCalcEnabled() && u.offers["stored-users-" + r.region].prices[0].price === 0, React.createElement("p", null, formatReact("First {0} free", u.offers["stored-users-" + r.region].prices[0].limit.toLocaleString(Acom.currentCulture)))), React.createElement(TextNumber, {
                label: "Users",
                name: "b2cUsers",
                min: "0",
                max: "999999999",
                defaultValue: r.b2cUsers,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(r).users,
                decimals: "2",
                format: "currency"
            }))), displayIf(r.displaySku && r.sku.adb2CStoredUsers, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, r.sku.adb2CStoredUsers))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h5", null, "Authentications"), displayIf(!Acom.Calculator.Stores.channelCalculator.isChannelCalcEnabled() && u.offers["authentications-users-" + r.region].prices[0].price === 0, React.createElement("p", null, formatReact("First {0} free", u.offers["authentications-users-" + r.region].prices[0].limit.toLocaleString(Acom.currentCulture)))), React.createElement(TextNumber, {
                label: "Authentications",
                name: "authentications",
                min: "0",
                max: "999999999",
                defaultValue: r.authentications,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(r).authentications,
                decimals: "2",
                format: "currency"
            }))), displayIf(r.displaySku && r.sku.adb2CAuthenticationsUsers, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, r.sku.adb2CAuthenticationsUsers))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h5", null, "Multi-Factor Authentications"), React.createElement(TextNumber, {
                label: "Authentications",
                name: "multiFactorAuthentications",
                min: "0",
                max: "999999999",
                defaultValue: r.multiFactorAuthentications,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                value: React.createElement(Acom.Atoms.Number, {
                    value: t(r).multiFactorAuthenticationsCost,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(r).multiFactorAuthentications,
                decimals: "2",
                format: "currency"
            }))), displayIf(r.displaySku && r.sku.adb2CMultifactorAuthenticationUsers, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, r.sku.adb2CMultifactorAuthenticationUsers))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Subtotal"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "active-directory-b2c",
        displayName: i,
        description: "Consumer identity and access management in the cloud",
        pricingApi: "/api/v1/pricing/active-directory-b2c/calculator/",
        component: r,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="active-directory" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M25.001,50.001c-1.232,0-2.392-0.48-3.261-1.352L1.351,28.261C0.492,27.402,0,26.215,0,25 c0-1.214,0.492-2.402,1.351-3.26L21.74,1.352C22.611,0.48,23.769,0,25.001,0c1.231,0,2.39,0.48,3.261,1.352L48.648,21.74 C49.521,22.608,50,23.767,50,25c0,1.233-0.479,2.392-1.353,3.263L28.262,48.649C27.392,49.521,26.232,50.001,25.001,50.001"/> <path fill="#FFFFFF" d="M38.614,21.093c-2.16,0-3.91,1.75-3.91,3.909c0,0.792,0.239,1.527,0.645,2.143l-7.744,7.744 c-0.206-0.144-0.427-0.264-0.656-0.373V14.759c1.167-0.676,1.961-1.924,1.961-3.37C28.91,9.23,27.16,7.48,25,7.48 c-2.158,0-3.908,1.75-3.908,3.909c0,1.446,0.794,2.694,1.96,3.37v19.756c-0.219,0.104-0.434,0.216-0.632,0.353l-7.753-7.753 c0.394-0.61,0.628-1.333,0.628-2.113c0-2.159-1.75-3.909-3.908-3.909c-2.16,0-3.91,1.75-3.91,3.909s1.75,3.909,3.91,3.909 c0.448,0,0.872-0.091,1.274-0.23l8.15,8.15c-0.234,0.548-0.364,1.15-0.364,1.783c0,2.513,2.038,4.551,4.551,4.551 c2.514,0,4.551-2.038,4.551-4.551c0-0.621-0.126-1.212-0.351-1.751l8.173-8.172c0.392,0.132,0.804,0.22,1.241,0.22 c2.158,0,3.908-1.75,3.908-3.909S40.771,21.093,38.614,21.093z"/> <rect x="31.006" y="8.226" transform="matrix(-0.707 0.7072 -0.7072 -0.707 68.2099 8.8718)" opacity="0.5" fill="#FFFFFF" width="2.523" height="20.676"/> <rect x="16.487" y="8.242" transform="matrix(0.7071 0.7071 -0.7071 0.7071 18.3355 -7.1088)" opacity="0.5" fill="#FFFFFF" width="2.524" height="20.677"/> <path fill="#B8D432" d="M27.665,38.614c0,1.496-1.214,2.709-2.71,2.709c-1.497,0-2.709-1.213-2.709-2.709 c0-1.496,1.212-2.709,2.709-2.709C26.45,35.905,27.665,37.118,27.665,38.614"/> <path fill="#B8D432" d="M27.174,11.389c0,1.201-0.973,2.174-2.174,2.174c-1.201,0-2.174-0.973-2.174-2.174 c0-1.201,0.973-2.174,2.174-2.174C26.201,9.215,27.174,10.188,27.174,11.389"/> <path fill="#B8D432" d="M13.563,25.001c0,1.201-0.975,2.174-2.174,2.174c-1.201,0-2.174-0.973-2.174-2.174 c0-1.201,0.973-2.174,2.174-2.174C12.588,22.827,13.563,23.8,13.563,25.001"/> <path fill="#B8D432" d="M40.788,25.001c0,1.201-0.975,2.174-2.175,2.174c-1.2,0-2.174-0.973-2.174-2.174 c0-1.201,0.974-2.174,2.174-2.174C39.813,22.827,40.788,23.8,40.788,25.001"/> <path opacity="0.1" fill="#FFFFFF" d="M28.262,1.352C27.391,0.48,26.233,0,25.001,0c-1.231,0-2.389,0.48-3.26,1.352L1.352,21.74 C0.492,22.598,0,23.786,0,25c0,1.215,0.492,2.403,1.352,3.261l11.543,11.544L34.61,7.699L28.262,1.352z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#active-directory"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-west",
                b2cUsers: 5e4,
                authentications: 5e4,
                multiFactorAuthentications: 0
            }
        },
        getPrice: function (n) {
            return u(n)
        },
        getDisplayName: function (n) {
            return n.name || i
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data,
                r = {};
            return i ? (r.adb2CStoredUsers = i.offers["stored-users-" + t.region].sku, r.adb2CAuthenticationsUsers = i.offers["authentications-users-" + t.region].sku, r.adb2CMultifactorAuthenticationUsers = i.offers["multi-factor-authentication-users-" + t.region].sku, r) : ""
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0} stored user(s), {1} authentication(s), {2} multi-factor authentications", n.b2cUsers, n.authentications, n.multiFactorAuthentications)
        },
        isValidOffer: function (t) {
            var i = n.getPricingApiStore().data,
                r;
            return i ? (r = i.offers["stored-users-" + t.region], r ? !0 : void 0) : undefined
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function r(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.offers[t] === Object(i.offers[t]) && i.offers[t] : undefined
    }

    function u(t, i) {
        var r = n.getPricingApiStore().data;
        return r ? r.offers[t].prices[i] : 0
    }
    var t = "Azure Analysis Services",
        i, n;
    i = React.createClass({
        displayName: "AnalysisServices",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var i = this.props,
                f = n.getPricingApiStore().data,
                e = f.tiers.map(function (n) {
                    var t = r(n.slug),
                        f = u(n.slug, i.region);
                    return {
                        slug: n.slug,
                        values: {
                            displayStrings: [n.displayName, formatString("{0} QPUs", t.qpu), formatString("{0} GB", t.memory), ],
                            number: {
                                value: f,
                                decimals: 3,
                                format: "currency",
                                rate: "{0}/hr"
                            }
                        }
                    }
                });
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: i.dataStore.module.icon
            }), " ", React.createElement("span", {
                className: "heading3"
            }, t, React.createElement("sup", {
                className: "preview normal-font"
            }, "Preview"))), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: f.regions,
                defaultValue: i.region
            })), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "offer-" + i.region,
                label: "Instances",
                name: "offer",
                options: e,
                delimiters: ["colon", "comma"],
                defaultValue: i.offer,
                onChange: this.onChange
            }))), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "instances",
                min: "1",
                max: "999999",
                defaultValue: i.instances,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hoursFactor-" + i.hoursFactor,
                name: "hours",
                defaultValue: i.hours,
                factorsName: "hoursFactor",
                factorsDefault: i.hoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "analysis-services",
        displayName: t,
        description: "Proven analytical engine in the cloud",
        pricingApi: "/api/v1/pricing/analysis-services/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="analysis-services" viewBox="0 0 1327.24 1025.711"> <polygon points="816.86 442.412 781.02 431.292 781.02 512.852 781.02 588.242 816.86 568.462 816.86 442.412" fill="#5ab4da"/> <polygon points="781.02 242.212 781.02 364.562 816.86 375.682 816.86 333.662 1290.17 333.662 1290.17 624.072 846.52 624.072 781.02 659.912 781.02 661.152 1327.24 661.152 1327.24 242.212 781.02 242.212" fill="#5ab4da"/> <polygon points="546.22 392.982 546.22 355.912 510.38 344.782 510.38 381.862 328.72 381.862 334.9 418.932 546.22 418.932 546.22 392.982" fill="#5ab4da"/> <polygon points="264.46 381.861 37.074 381.861 37.074 91.449 510.384 91.449 510.384 278.054 546.222 289.176 546.222 0 0 0 0 418.935 270.639 418.935 264.46 381.861" fill="#5ab4da"/> <polygon points="604.304 989.872 130.994 989.872 130.994 698.225 313.892 698.225 299.063 606.776 93.921 606.776 93.921 1025.711 640.142 1025.711 640.142 735.299 604.304 753.835 604.304 989.872" fill="#5ab4da"/> <polygon points="378.15 698.222 574.65 698.222 640.14 662.382 640.14 606.772 363.32 606.772 378.15 698.222" fill="#5ab4da"/> <path d="M782.26,638.9l27.69-14.83,6.91-3.7,185.37-98.87c8.65,9.89,19.77,18.54,33.37,22.25,6.18,2.47,13.59,2.47,19.77,2.47a69.694,69.694,0,0,0,66.73-50.67c11.12-37.07-11.12-75.38-46.96-86.5-6.18-1.24-12.36-2.48-19.77-2.48a69.336,69.336,0,0,0-64.26,43.26l-174.25-55.61-35.84-11.13-234.8-75.38-35.84-11.12-1.23-.39-166.83-52.75a73.281,73.281,0,0,0-7.42-39.55c-12.36-23.48-37.07-37.07-61.79-37.07-11.12,0-22.24,2.47-32.13,8.65-33.37,18.54-46.96,60.55-28.42,93.92,12.35,22.25,34.6,35.84,58.08,37.08L283,383.092l6.18,35.84,29.65,187.84,13.6,91.45,12.36,81.56c-19.78,7.42-37.08,23.49-43.26,45.73-11.12,37.07,11.13,75.38,46.96,86.51,6.18,1.23,12.36,2.47,19.78,2.47A69.706,69.706,0,0,0,435,863.822c3.71-13.59,3.71-25.95,0-38.31l170.54-91.45,35.84-19.77,139.64-74.73Zm-2.47-30.89-139.65,74.15-35.84,19.77-184.13,98.86c-8.65-9.88-19.77-18.53-33.37-22.24-4.94-1.24-9.88-2.47-14.83-2.47l-12.35-77.86-13.6-91.45-29.66-187.84-6.17-35.84-12.36-81.56q3.7-1.845,7.41-3.71c12.36-6.17,21.01-16.06,27.19-27.18l176.72,56.84,35.84,11.13,1.23.39,233.57,74.99,35.84,11.12,169.3,54.38c0,6.18,1.24,11.12,2.47,17.3l-170.54,90.8-1.23.65-34.61,19.09Z" fill="#5ab4da"/> <\/symbol><\/defs><\/svg><svg><use xlink:href="#analysis-services"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-south-central",
                offer: "s1",
                instances: 1,
                hours: 744,
                hoursFactor: "1"
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.offer].prices[t.region] * t.instances * t.hours * t.hoursFactor : undefined
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        willUpdate: function (n, t) {
            return n.hoursFactor !== t.hoursFactor && (t.hours = factorInput(n.hoursFactor, t.hoursFactor, n.hours)), t
        },
        getDescription: function (n) {
            var t = r(n.offer) || {};
            return Core.Util.FormatString("{0} tier: {1} QPUs, {2} GB memory. {3} instance(s) for  {4} {5} ", n.offer, t.qpu, t.memory, n.instances, n.hours, factorLabel(n.hoursFactor))
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.offer].skus[t.region] : ""
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";
    var t = "API Management",
        i, n;
    i = React.createClass({
        displayName: "ApiManagement",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var i = this.props,
                r = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: i.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: i.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: r.regions,
                defaultValue: i.region
            }), React.createElement(CalculatorDropdown, {
                label: "Pricing Tier",
                name: "tier",
                options: r.tiers,
                defaultValue: i.tier
            }))), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Units",
                name: "units",
                min: "1",
                max: "999",
                defaultValue: i.units,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(TextNumber, {
                label: "Days",
                name: "days",
                min: "1",
                max: "31",
                defaultValue: i.days,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "api-management",
        displayName: t,
        description: "Publish APIs to developers, partners and employees securely and at scale",
        pricingApi: "/api/v1/pricing/api-management/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="api-management" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M20.5,32.5h-8.9l0,0c-4.4,0-8-3.6-8-8.1s3.4-8.1,8-8.1c0.8,0,1.7,0.2,2.7,0.3l1.7,0.5l0.5-1.7 C18.1,10.2,23.1,7,28.8,7c6.9,0,12.2,5.3,12.2,12.2c0,1.1-0.2,2.2-0.5,3.3L39.8,25l2.7-0.3c0.2,0,0.3,0,0.5,0c2,0,3.6,1.7,3.6,3.6 s-1.4,3.3-3.1,3.6c0,0-8.6,0-8.9,0c-0.3-2.5-1.6-4.7-3.3-6.4C29.1,23.3,26.1,22,23,22c-2.2,0-4.4,0.6-6.1,1.7l1.9,3 c1.4-0.8,2.8-1.1,4.4-1.1c2.2,0,4.4,0.8,5.8,2.5c1.6,1.6,2.5,3.6,2.5,5.8s-0.8,4.4-2.5,5.8c-1.6,1.7-3.6,2.5-5.8,2.5 c-1.6,0-3.1-0.5-4.4-1.4l-1.9,3c1.9,1.1,4.1,1.9,6.1,1.9c3.1,0,6.1-1.1,8.3-3.4c1.9-1.9,3-4.4,3.3-7c0.5,0,9.1,0,9.1,0h0.2 c3.6-0.3,6.3-3.4,6.3-7.2c0-3-2.8-5.8-6.1-6.4c0.2-0.6,0.2-0.9,0.2-1.9c0-8.8-6.2-15.8-16.1-15.8l0,0c-6.3,0-11.9,3.6-14.2,9.4 c-0.8,0-1.4-0.3-2.3-0.3C5.2,13,0,18,0,24.4c0,6.3,5.2,11.3,11.4,11.3h9.8L20.5,32.5z"/> <circle fill="#68217A" cx="22.8" cy="33.8" r="5.6"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#api-management"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                tier: "developer",
                units: 1,
                days: 1
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier] ? i.offers[t.tier].prices[t.region] * t.days * t.units : void 0 : undefined
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return !i || !i.offers[t.tier] ? "" : i.offers[t.tier].skus[t.region]
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0} units, {1} day(s), {2} tier", n.units, n.days, n.tier)
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function o() {
        var n = Acom.Calculator.Stores.channelCalculator.currentDiscount(),
            t = !0;
        return ["ea"].forEach(function (i) {
            n && n.indexOf(i) === 0 && (t = !1)
        }), t
    }

    function r(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.offers[t.tier + "-" + t.size].prices[t.region] * t.hours * t.hoursFactor * t.instances : 0
    }

    function u(t) {
        var i = n.getPricingApiStore().data;
        return i ? getGraduatedPrice(i.graduatedOffers["data-processing-" + t.size][t.region].prices, t.dataUnits * t.processedUnits) : 0
    }

    function f(t) {
        var i = n.getSecondaryPricingApiStore().data;
        return i ? getGraduatedPrice(i.offers[t.region].prices, t.units * t.storageUnits) : 0
    }

    function s(t) {
        var i = n.getSecondaryPricingApiStore().data,
            r;
        if (!i) return "";
        if (["usgov-iowa", "usgov-virginia"].indexOf(t.region) >= 0) return "Government Zone";
        r = e(t, i);
        switch (r) {
            case "zone1":
                return Core.Util.FormatString("{0}: {1}, {2}", "Zone 1", "North America", "Europe");
            case "zone2":
                return Core.Util.FormatString("{0}: {1}, {2}, {3}", "Zone 2", "Asia Pacific", "Japan", "Australia");
            case "zone3":
                return Core.Util.FormatString("{0}: {1}", "Zone 3", "Brazil");
            case "zone4":
                return Core.Util.FormatString("{0}", "DE (trustee): Germany");
            default:
                return ""
        }
    }

    function e(n, t) {
        for (var i in t.availableRegionsPerZone)
            if (t.availableRegionsPerZone[i].indexOf(n.region) >= 0) return i;
        return ""
    }
    var t = "Application Gateway",
        i, n;
    i = React.createClass({
        displayName: "ApplicationGateway",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var i = this.props,
                e = n.getPricingApiStore().data,
                o = e.sizes.map(function (n) {
                    return {
                        slug: n.slug,
                        displayName: n.displayName,
                        disabled: i.tier === "waf" && n.slug === "small"
                    }
                });
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: i.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: i.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: e.regions,
                defaultValue: i.region
            }), React.createElement(CalculatorDropdown, {
                label: "Pricing tier",
                name: "tier",
                options: e.tiers,
                defaultValue: i.tier
            })), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Size",
                name: "size",
                options: o,
                defaultValue: i.size
            })), displayIf(i.size === "medium", React.createElement("p", null, "No charge for the first 10 TB of data processed for a Medium instance.")), displayIf(i.size === "large", React.createElement("p", null, "No charge for the first 40 TB of data processed for a Large instance."))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Gateway hours"), React.createElement(TextNumber, {
                label: "Instances",
                name: "instances",
                min: "0",
                max: "9999",
                defaultValue: i.instances,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hours-" + i.hoursFactor + i.tier,
                name: "hours",
                defaultValue: i.hours,
                factorsName: "hoursFactor",
                factorsDefault: i.hoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(i),
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku && i.sku.gateway))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Data processed"), React.createElement(FactoredInput, {
                key: "factor-processed" + i.processedUnits,
                name: "dataUnits",
                defaultValue: i.dataUnits,
                factorsName: "processedUnits",
                factorsDefault: i.processedUnits || "1",
                factorUnit: "gbs",
                min: "0",
                max: i.processedUnits === "1" ? 101376 : 99,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u(i),
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku && i.sku.dataProcessing))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, s(i)), React.createElement(FactoredInput, {
                key: "factor-units-" + i.storageUnits,
                defaultValue: i.units,
                name: "units",
                factorsName: "storageUnits",
                factorsDefault: i.storageUnits,
                factorUnit: "gbs",
                min: "0",
                max: i.storageUnits === "1" ? 9999 : 500,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f(i),
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku && i.sku.dataTransfer))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "application-gateway",
        displayName: t,
        description: "Build scalable and highly-available web front ends in Azure",
        pricingApi: "/api/v1/pricing/application-gateway/calculator/",
        secondaryPricingApi: "/api/v1/pricing/data-transfers/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="application-gateway" viewBox="0 0 50 50"> <path fill="#0072c6" d="M48.6,21.7L28.3,1.4C27.4,0.5,26.2,0,25,0c-1.2,0-2.4,0.5-3.3,1.4L1.4,21.7C0.5,22.6,0,23.8,0,25 c0,1.2,0.5,2.4,1.4,3.3l20.4,20.4c0.9,0.9,2,1.4,3.3,1.4c1.2,0,2.4-0.5,3.3-1.4l20.4-20.4c0.9-0.9,1.4-2,1.4-3.3 C50,23.8,49.5,22.6,48.6,21.7z M25,4.8l6.6,6.6H27V21h-3.9v-9.6h-4.7L25,4.8z M6.4,27.4v-3.9h9v-4.7l6.6,6.6L15.4,32v-4.6H6.4z M25,46l-6.6-6.6H23V30h3.9v9.4h4.7L25,46z M43.6,27.4h-8.9v4.7l-6.6-6.6l6.6-6.6v4.6h8.9V27.4z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#application-gateway"><\/use><\/svg>'
        },
        initialSettings: {
            region: "us-east",
            size: "small",
            tier: "basic",
            instances: 0,
            hours: 744,
            hoursFactor: "1",
            dataUnits: 0,
            processedUnits: "1",
            units: o() ? 5 : 1,
            storageUnits: "1",
            zone: "zone1"
        },
        getInitialState: function () {
            return this.initialSettings
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? r(t) + u(t) + f(t) : 0
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        willUpdate: function (t, i) {
            var u = n.getPricingApiStore().data,
                r = n.getSecondaryPricingApiStore().data;
            return t.processedUnits !== i.processedUnits && (i.dataUnits = factorInput(t.processedUnits, i.processedUnits, t.dataUnits)), t.storageUnits !== i.storageUnits && (i.units = this.initialSettings.units), t.hoursFactor !== i.hoursFactor && (i.hours = factorInput(t.hoursFactor, i.hoursFactor, t.hours)), t.tier !== i.tier && i.tier === "waf" && (i.size = "medium"), i.zone = e(t, r), i
        },
        getDescription: function (n) {
            var t = {
                1: "GB",
                1024: "TB"
            };
            return Core.Util.FormatString("{0} instance(s) x {1} {2}, {3} {4} data processed, outbound transfers:: {5} {6}", n.instances, n.hours, factorLabel(n.hoursFactor), n.dataUnits, t[n.processedUnits], n.units, t[n.storageUnits])
        },
        getSku: function (t) {
            var r = n.getPricingApiStore().data,
                u = n.getSecondaryPricingApiStore().data,
                i = {};
            return !r || !u ? undefined : (i.gateway = r.offers[t.tier + "-" + t.size].skus[t.region], i.dataProcessing = r.graduatedOffers["data-processing-" + t.size][t.region].sku, i.dataTransfer = u.offers[t.region].sku, i)
        },
        isValidOffer: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier + "-" + t.size].prices[t.region] >= 0 : !1
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function u(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            price: i.offers["additional-data"].prices[t.region],
            cost: i.offers["additional-data"].prices[t.region] * (t.basicGbs - i.offers.basic.includedData)
        } : 0
    }

    function t(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            nodesPrice: i.offers.enterprise.prices[t.region],
            nodesCost: i.offers.enterprise.prices[t.region] * t.enterpriseNodes,
            gbsPrice: i.offers["additional-data"].prices[t.region],
            gbsCost: i.offers["additional-data"].prices[t.region] * t.enterpriseGbs
        } : 0
    }

    function i(t) {
        var r = n.getPricingApiStore().data,
            i;
        return r ? (i = r.offers["web-test"].prices, {
            price: i[t.region],
            cost: i[t.region] * t.webTests
        }) : 0
    }
    var r = "Application Insights",
        f, n;
    f = React.createClass({
        displayName: "ApplicationInsights",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                f = n.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: r,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: f.regions,
                defaultValue: n.region,
                onChange: this.onChange
            }), React.createElement(CalculatorDropdown, {
                label: "Pricing tier",
                name: "tier",
                options: f.tiers,
                defaultValue: n.tier,
                onChange: this.onChange
            }))), displayIf(n.tier === "basic", React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("p", null, formatString("Includes {0} GB(s) per month for free.", f.offers.basic.includedData)), React.createElement(TextNumber, {
                label: "GB",
                name: "basicGbs",
                min: "1",
                max: "9999",
                defaultValue: n.basicGbs,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per GB",
                value: React.createElement(Acom.Atoms.Number, {
                    value: u(n).price,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u(n).cost,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.basicGbs, React.createElement("div", {
                className: "sku-under-total center"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.basicGbs)))))), displayIf(n.tier === "enterprise", React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("p", null, formatString("Includes {0} MB per node per day", f.offers.enterprise.dataPerNode)), React.createElement(TextNumber, {
                label: "Nodes",
                name: "enterpriseNodes",
                min: "0",
                max: "9999",
                defaultValue: n.enterpriseNodes,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per node",
                value: React.createElement(Acom.Atoms.Number, {
                    value: t(n).nodesPrice,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(n).nodesCost,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.enterpriseNodes, React.createElement("div", {
                className: "sku-under-total center"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.enterpriseNodes))))), React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("p", null, formatString("Additional data (when exceeding the {0} MB per node per day allowance)", f.offers.enterprise.dataPerNode)), React.createElement(TextNumber, {
                label: "GB",
                name: "enterpriseGbs",
                min: "0",
                max: "9999",
                defaultValue: n.enterpriseGbs,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per GB",
                value: React.createElement(Acom.Atoms.Number, {
                    value: t(n).gbsPrice,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(n).gbsCost,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.enterpriseGbs, React.createElement("div", {
                className: "sku-under-total center"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.enterpriseGbs))))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Multi-step Web Test"), React.createElement(TextNumber, {
                label: "Tests",
                name: "webTests",
                min: "0",
                max: "9999",
                defaultValue: n.webTests,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per test",
                value: React.createElement(Acom.Atoms.Number, {
                    value: i(n).price,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(n).cost,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.webTest, React.createElement("div", {
                className: "sku-under-total center"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.webTest))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "application-insights",
        displayName: r,
        description: "Detect, triage, and diagnose issues in your web apps and services",
        pricingApi: "/api/v1/pricing/application-insights/calculator/",
        component: f,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="application-insights" viewBox="0 0 50 50"> <path fill="#68217A" d="M41.4,14.7L41.4,14.7v-0.3c0-7.7-6.6-14.1-14.7-14.2c-0.2-0.3-4.8,0.1-4.8,0.1l0,0c-7.3,0.9-13,7-13,14.1 c0,0.2-0.8,5.8,4.9,10.5c2.6,2.3,5.3,8.5,5.7,10.3l0.3,0.6h10.6l0.3-0.6c0.4-1.8,3.2-8,5.7-10.2C42.1,20.2,41.4,14.9,41.4,14.7z"/> <rect x="20" y="39.4" fill="#7A7A7A" width="10.6" height="3.4"/> <polygon fill="#7A7A7A" points="23.3,50 27.2,50 30.5,46.5 20,46.5 "/> <g opacity="0.65"> <path fill="#FFFFFF" d="M27.9,35.3h-2V22.6l-1.7,0v12.6h-2V22.6l-1.7,0c-2,0-3.7-1.7-3.7-3.7s1.6-3.7,3.7-3.7s3.7,1.7,3.7,3.7v1.7 l1.7,0v-1.7c0-2,1.7-3.7,3.7-3.7s3.7,1.7,3.7,3.7c0,2-1.7,3.7-3.7,3.7l-1.7,0V35.3z M20.5,17.2c-0.9,0-1.7,0.7-1.7,1.7 c0,0.9,0.8,1.7,1.7,1.7l1.7,0v-1.7C22.1,18,21.4,17.2,20.5,17.2z M29.6,17.2c-0.9,0-1.7,0.8-1.7,1.7v1.7l1.7,0 c0.9,0,1.7-0.8,1.7-1.7C31.3,18,30.6,17.2,29.6,17.2z"/> <\/g> <g opacity="0.15"> <path fill="#FFFFFF" d="M26.7,0.2c-0.2-0.3-4.8,0.1-4.8,0.1c-7.3,0.9-13,7-13,14.1c0,0.2-0.7,5.1,3.9,9.6L34.4,2.4 C32.1,1,29.5,0.2,26.7,0.2z"/> <\/g> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#application-insights"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                tier: "basic",
                basicGbs: 1,
                enterpriseNodes: 0,
                enterpriseGbs: 0,
                webTests: 0
            }
        },
        getPrice: function (r) {
            return n.getPricingApiStore().data ? r.tier === "basic" ? u(r).cost + i(r).cost : r.tier === "enterprise" ? t(r).nodesCost + t(r).gbsCost + i(r).cost : void 0 : 0
        },
        getDisplayName: function (n) {
            return n.name || r
        },
        getDescription: function (n) {
            return n.tier === "basic" ? formatString("{0} tier in {1} region with {2} GBs and {3} multi-step web test(s).", n.tier, n.region, n.basicGbs, n.webTests) : n.tier === "enterprise" ? formatString("{0} tier in {1} region with {2} nodes and {3} GB of additional data with {4} multi-step web test(s).", n.tier, n.region, n.enterpriseNodes, n.enterpriseGbs, n.webTests) : void 0
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? {
                basicGbs: i.offers["additional-data"].skus[t.region],
                enterpriseNodes: i.offers.enterprise.skus[t.region],
                enterpriseGbs: i.offers["additional-data"].skus[t.region],
                webTest: i.offers["web-test"].skus[t.region]
            } : undefined
        },
        isValidOffer: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers["web-test"].prices[t.region] : !1
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function t(t, i, r) {
        var f = n.getPricingApiStore().data,
            u;
        return f ? (u = f.offers[i + "-" + r], u && typeof u.prices[t] != "undefined" && u) : undefined
    }

    function o(n, i, r) {
        var u = t(n, i, r);
        return u && u.prices[n]
    }

    function u(t) {
        var i = n.getPricingApiStore().data;
        return i ? o(t.region, t.tier, t.size) * t.instances * t.hours * (t.hoursFactor || "1") : undefined
    }

    function f(t) {
        var f = n.getPricingApiStore().data,
            i, r, u;
        return f ? t.tier === "free" || t.tier === "shared" ? 0 : (i = f.graduatedOffers, r = i["sni-" + t.tier][t.region], u = i["ip-" + t.tier][t.region], {
            sni: r ? getGraduatedPrice(r.prices, t.sniConnections) : 0,
            ip: u ? getGraduatedPrice(u.prices, t.ipConnections) : 0,
            customDomains: getGraduatedPrice(i["custom-domain"][t.region].prices, 1)
        }) : undefined
    }

    function i(n, i, r) {
        return !!t(n, i, r)
    }

    function s(n) {
        return n !== "free" && n !== "shared"
    }
    var r = "App Service",
        e, n;
    e = React.createClass({
        displayName: "AppService",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                e = n.dataStore.pricingData,
                s = e.sizes.filter(function (t) {
                    return i(n.region, n.tier, t.slug)
                }).map(function (i) {
                    var r = t(n.region, n.tier, i.slug),
                        u = o(n.region, n.tier, i.slug);
                    return {
                        slug: i.slug,
                        values: {
                            displayStrings: [i.displayName, formatString("{0} cores", r.cores || "Shared"), formatString("{0} GB RAM", r.ram), formatString("{0} GB Storage", r.diskSpace)],
                            number: {
                                value: u,
                                decimals: 3,
                                format: "currency",
                                rate: "{0}/hr"
                            }
                        }
                    }
                });
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: r,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: e.regions,
                defaultValue: n.region
            }), React.createElement(CalculatorDropdown, {
                label: "Tier",
                name: "tier",
                options: e.tiers,
                defaultValue: n.tier
            }, React.createElement(Tooltip, null, formatReact("<h4>Free<\/h4><p>Use the Free plan to quickly evaluate App Service and convert the app at any time to one of the paid plans without delays or downtime.<\/p><h4>\tShared<\/h4><p>Develop and test in an environment with features such as SSL, domain names, and more before production and is suitable for low traffic sites.<\/p><h4>Basic<\/h4><p>Designed for apps that have lower traffic requirements and do not need more advanced autoscale and traffic management features.<\/p><h4>Standard<\/h4><p>Designed for production API, Mobile, and Web apps. There are no limits on the number of apps/domains you can host.<\/p><h4>\tPremium<\/h4><p>Designed for production apps.  Supports larger numbers of scale instances, additional connectors, and BizTalk capabilities, while including all the advanced capabilities found in the Standard plan.<\/p>")))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "size-" + n.region + n.tier,
                label: "Instance Size",
                name: "size",
                options: s,
                delimiters: ["colon", "comma"],
                defaultValue: n.size,
                onChange: this.onChange
            }))), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "instances",
                min: "1",
                max: "999",
                defaultValue: n.instances,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-" + n.hoursFactor,
                name: "hours",
                defaultValue: n.hours,
                factorsName: "hoursFactor",
                factorsDefault: n.hoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u(n),
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.appservice, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.appservice))))), displayIf(n.tier !== "free" && n.tier !== "shared", React.createElement("div", null, React.createElement("div", {
                className: "service-properties collapsible"
            }, React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "SSL Connections"), React.createElement("h4", null, "SNI SSL"), React.createElement(TextNumber, {
                label: "Connections",
                name: "sniConnections",
                min: "0",
                max: "999",
                defaultValue: n.sniConnections,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f(n).sni,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.sslConnectionsSni, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.sslConnectionsSni))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h4", null, "IP SSL"), React.createElement(TextNumber, {
                label: "Connections",
                name: "ipConnections",
                min: "0",
                max: "999",
                defaultValue: n.ipConnections,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f(n).ip,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.sslConnectionsIp, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.sslConnectionsIp)))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "app-service",
        displayName: r,
        description: "Create web and mobile apps for any platform and any device",
        pricingApi: "/api/v1/pricing/app-service/calculator/",
        component: e,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="app-service" viewBox="0 0 50 50"> <path fill="#A0A1A2" d="M20.1,46.5H3.5V30h3.4c-0.4-1-0.6-2.1-0.6-3.3c0,0,0-0.1,0-0.2H0V50h23.6V36h-3.5V46.5z"/> <path fill="#A0A1A2" d="M43.5,30h3v16.6H29.9V36.1h-3.5V50H50V26.5h-7.4c0.5,1,0.9,2,0.9,3.3C43.5,29.8,43.5,29.9,43.5,30z"/> <path fill="#A0A1A2" d="M3.5,20V3.5h16.6v9.6c1-0.8,2.3-1.3,3.5-1.6V0H0v23.5h6.8C7.3,22.3,8,21,9,20.1L3.5,20L3.5,20z"/> <path fill="#A0A1A2" d="M29.9,11.1V3.5h16.6v16.6h-7.3c0.3,1,0.5,2.2,0.5,3.4c0,0,0,0.1,0,0.1H50V0H26.4v10.9c0.3,0,0.5-0.1,0.8-0.1 C28.1,10.9,29,10.9,29.9,11.1z"/> <path fill="#59B4D9" d="M40.8,29.7c0-2.1-1.7-3.7-3.7-3.7c-0.2,0-0.3,0-0.5,0c0.2-0.8,0.4-1.7,0.4-2.6c0-5.5-4.4-9.9-9.9-9.9 c-4.3,0-8,2.8-9.3,6.8c-0.7-0.2-1.4-0.4-2.2-0.4c-3.7,0-6.7,3-6.7,6.8c0,3.8,3,6.8,6.7,6.8c0,0,0,0,0,0v0h21.8l0,0 C39.3,33.3,40.8,31.7,40.8,29.7"/> <path opacity="0.2" fill="#FFFFFF" d="M19.2,33.5c-0.9-0.9-1.5-2-1.8-3.3c-0.8-3.7,1.4-7.3,5.1-8.1c0.8-0.2,1.5-0.2,2.2-0.1 c0.3-3.4,2.4-6.5,5.5-8c-0.9-0.3-1.9-0.5-3-0.5c-4.3,0-8,2.8-9.3,6.8c-0.7-0.2-1.4-0.4-2.2-0.4c-3.7,0-6.7,3-6.7,6.8 c0,3.8,3,6.8,6.7,6.8c0,0,0,0,0,0v0H19.2z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#app-service"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-west",
                tier: "basic",
                size: "b1",
                instances: 1,
                hours: 744,
                hoursFactor: "1",
                sniConnections: 0,
                ipConnections: 0
            }
        },
        getPrice: function (t) {
            var i;
            return n.getPricingApiStore().data ? s(t.tier) ? (i = f(t), u(t) + i.sni + i.ip) : u(t) : 0
        },
        getDisplayName: function (n) {
            return n.name || r
        },
        willUpdate: function (t, r) {
            var e = n.getPricingApiStore().data,
                u, f;
            if (!i(r.region, r.tier, r.size))
                for (f = 0; u = e.sizes[f]; f++)
                    if (i(r.region, r.tier, u.slug)) {
                        r.size = u.slug;
                        break
                    }
            return t.hoursFactor !== r.hoursFactor && (r.hours = factorInput(t.hoursFactor, r.hoursFactor, r.hours)), r
        },
        getSku: function (i) {
            var e = n.getPricingApiStore().data,
                u, r, f;
            return e ? (u = t(i.region, i.tier, i.size), r = {}, u && u.skus[i.region] && (r.appservice = u.skus[i.region]), s(i.tier) && (f = e.graduatedOffers, r.sslConnectionsSni = f["sni-" + i.tier][i.region].sku, r.sslConnectionsIp = f["ip-" + i.tier][i.region].sku), r) : ""
        },
        getDescription: function (n) {
            return n.tier != "free" && n.tier != "shared" ? Core.Util.FormatString("{0} instance(s), {1} {2}, size: {3}, {4} tier, {5} SNI connection(s), {6} IP connection(s)", n.instances, n.hours, factorLabel(n.hoursFactor), n.size, n.tier, n.sniConnections, n.ipConnections) : Core.Util.FormatString("{0} instance(s), {1} {2}, size: {3}, {4} tier", n.instances, n.hours, factorLabel(n.hoursFactor), n.size, n.tier)
        },
        isValidOffer: function (n) {
            return i(n.region, n.tier, n.size)
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function r(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.offers[t.capability + "-" + t.tier].prices[t.region] : undefined
    }

    function u(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.offers[t.capability + "-" + t.tier].prices[t.region] : undefined
    }
    var t = "Automation",
        i, n;
    i = React.createClass({
        displayName: "Automation",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                i = n.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: i.regions,
                defaultValue: n.region
            }), React.createElement(CalculatorDropdown, {
                label: "Tier",
                name: "tier",
                options: i.tiers,
                defaultValue: n.tier
            })), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Capability",
                name: "capability",
                options: i.capabilities,
                defaultValue: n.capability
            }))), displayIf(n.capability === "process", React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: n.tier + "1",
                label: "Minutes",
                name: "minutes",
                min: "1",
                max: n.tier === "free" ? 500 : 999999999,
                defaultValue: n.minutes,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(n),
                decimals: "3",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per minute")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku))))), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: n.tier + "2",
                label: "Nodes",
                name: "nodes",
                min: "1",
                max: n.tier === "free" ? 5 : 99999,
                defaultValue: n.nodes,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u(n),
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Node/mo")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku)))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "automation",
        displayName: t,
        description: "Simplify cloud management with process automation",
        pricingApi: "/api/v1/pricing/automation/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="automation" viewBox="0 0 50 50"> <path fill="#A0A1A2" d="M46.281,23.344c0-0.375-0.031-0.734-0.063-1.109L50,20.141c-0.203-1.25-0.531-2.469-0.969-3.625 l-4.313,0.078c-0.328-0.672-0.688-1.328-1.094-1.938l2.219-3.703c-0.797-0.969-1.688-1.859-2.641-2.641l-2.188,1.297l-0.922,1.375 l-1.984,2.922c2.813,2.188,4.625,5.594,4.625,9.438c0,6.594-5.328,11.938-11.922,11.938c-6.578,0-11.922-5.344-11.922-11.938 c0-5.906,4.281-10.781,9.906-11.75l0.906-3.672l-2.094-3.781C26.359,4.344,25.156,4.672,24,5.109l0.063,4.328 c-0.656,0.313-1.313,0.672-1.922,1.094l-3.703-2.219c-0.969,0.781-1.844,1.672-2.641,2.641l2.219,3.703 c-0.422,0.609-0.766,1.266-1.094,1.938l-4.328-0.078c-0.422,1.156-0.75,2.375-0.953,3.625l3.766,2.094 c-0.031,0.375-0.047,0.734-0.047,1.109s0.016,0.734,0.047,1.109l-3.766,2.094c0.203,1.25,0.531,2.469,0.969,3.625l4.313-0.078 c0.328,0.672,0.672,1.328,1.094,1.938l-2.219,3.703c0.797,0.969,1.672,1.859,2.641,2.656l3.703-2.234 c0.609,0.422,1.266,0.781,1.922,1.109L24,41.578c1.156,0.438,2.359,0.766,3.609,0.969l2.109-3.781 c0.359,0.031,0.719,0.063,1.094,0.063s0.75-0.031,1.109-0.063l2.094,3.781c1.25-0.203,2.469-0.531,3.625-0.969l-0.078-4.313 c0.672-0.328,1.313-0.688,1.938-1.109l3.703,2.234c0.953-0.797,1.844-1.688,2.641-2.656l-2.219-3.703 c0.406-0.609,0.766-1.266,1.094-1.938l4.313,0.078c0.438-1.156,0.766-2.375,0.969-3.625l-3.781-2.094 C46.25,24.078,46.281,23.719,46.281,23.344z"/> <path fill="#7A7A7A" d="M16,39.719v-1.859l-0.102-0.094l-1.902-0.641l-0.49-1.281l0.942-1.953l0.104-0.219l-0.589-0.594 l-0.716-0.719l-0.249,0.125l-1.859,0.953l-1.281-0.359L9.047,31H7.203l-0.094,0.094l-0.641,1.898L5.172,33.48l-2.156-1.037 l-1.313,1.302l0.125,0.245l0.953,1.857l-0.531,1.28L0,37.938v1.859l0.266,0.078l1.984,0.656l0.531,1.281l-1.016,2.156l1.313,1.328 l0.25-0.125l1.859-0.953l1.281,0.531L7.281,47h1.859l0.078-0.266l0.656-1.984l1.266-0.531l2.172,1.016l1.313-1.313l-0.125-0.25 l-0.953-1.859l0.367-1.297L16,39.719z M8.172,41.438c-1.438,0-2.609-1.172-2.609-2.609s1.172-2.609,2.609-2.609 s2.594,1.172,2.594,2.609S9.609,41.438,8.172,41.438z"/> <path fill="#FCD116" d="M33.297,1.688l-0.719,2.266l-1.234,3.938L30.75,9.781l-0.516,1.656l-3.594,11.422 c-0.078,0.219,0.031,0.391,0.281,0.391h3.313c0.109,0,0.188,0.031,0.234,0.094c0.078,0.078,0.094,0.188,0.047,0.313l-3.422,8.297 c-0.094,0.219-0.031,0.266,0.125,0.078L38.047,19.75c0.156-0.188,0.094-0.328-0.141-0.328l-3.547,0.016l-0.656,0.016 c-0.234,0-0.344-0.172-0.219-0.375l3.375-6.016l0.797-1.438l0.922-1.656l1.969-3.484l1.125-2.031 C39.156,3,36.328,2.031,33.297,1.688z"/> <path opacity="0.3" fill="#FF8C00" d="M39.505,3.367l-7.844,16.07h1.953c-0.174-0.037-0.249-0.183-0.14-0.359l3.375-6.016 l0.797-1.438l0.922-1.656l1.969-3.484l1.125-2.031C40.966,4.052,40.245,3.692,39.505,3.367z"/> <path opacity="0.3" fill="#FF8C00" d="M37.92,19.422l-2.189,0.01l-8.093,12.14L38.061,19.75 C38.217,19.563,38.155,19.422,37.92,19.422z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#automation"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east-2",
                tier: "free",
                capability: "process",
                minutes: 500,
                nodes: 5
            }
        },
        getPrice: function (t) {
            return n.getPricingApiStore().data ? t.capability === "process" ? t.minutes * r(t) : t.nodes * u(t) : 0
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        willUpdate: function (n, t) {
            return (n.tier !== t.tier || n.capability !== t.capability) && (t.minutes = 500, t.nodes = 5), t
        },
        getDescription: function (n) {
            var t = Core.Util.FormatString("{0} tier, {1} capability", n.tier, n.capability);
            return n.capability === "process" ? t += Core.Util.FormatString(", {0} minutes(s)", n.minutes) : n.capability === "dsc" && (t += Core.Util.FormatString(", {0} node(s)", n.nodes)), t
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? t.capability === "process" ? i.offers[t.capability + "-" + t.tier].skus[t.region] : i.offers[t.capability + "-" + t.tier].skus[t.region] : undefined
        },
        isValidOffer: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.capability + "-" + t.tier].prices[t.region] >= 0 : !1
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";
    var t = "Azure Search",
        i, n;
    i = React.createClass({
        displayName: "AzureSearch",
        checkTier: function (n) {
            var t = this.props;
            return n === "free" ? React.createElement("div", {
                className: "cost"
            }, React.createElement("p", {
                style: {
                    float: "left"
                }
            }, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "Includes 50MB storage, 10,000 documents hosted, 3 index limit"), React.createElement("div", {
                className: "total"
            }, formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            }))))) : React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Units",
                name: "units",
                min: "1",
                max: "999",
                defaultValue: t.units,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hours-" + t.hoursFactor,
                name: "hours",
                defaultValue: t.hours,
                factorsName: "hoursFactor",
                factorsDefault: t.hoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku)))))
        },
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                i = n.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: i.regions,
                defaultValue: n.region
            }), React.createElement(CalculatorDropdown, {
                label: "Tiers",
                name: "tier",
                options: i.tiers,
                defaultValue: n.tier
            }))), this.checkTier(n.tier))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "search",
        displayName: t,
        description: "Fully-managed search-as-a-service",
        pricingApi: "/api/v1/pricing/search/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="search" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M44,14.2c0-0.4,0.1-0.9,0.1-1.3c0-7.1-5.8-12.8-13-12.8C26.9,0,23,2,20.6,5.3c-1.5-1-3.3-1.5-5.2-1.5 c-5.4,0-9.8,4.4-9.8,9.7l0,0.8C2,16.2,0,19.3,0,23.1c0,6,4.9,10.7,11.2,10.7h27.6c6.3,0,11.2-4.7,11.2-10.7 C50,19.1,47.8,15.9,44,14.2z"/> <path opacity="0.2" fill="#FFFFFF" d="M7,28c0-4.1,2.1-7.3,6-9.3l0-0.8c0-5.7,4.7-10.3,10.4-10.3c2,0,3.9,0.5,5.5,1.5 c2.5-3.5,6.7-5.7,11.2-5.7c0,0,0,0,0,0C37.7,1.3,34.6,0,31.1,0C26.9,0,23,2,20.6,5.3c-1.5-1-3.3-1.5-5.2-1.5c-5.4,0-9.8,4.4-9.8,9.7 l0,0.8C2,16.2,0,19.3,0,23.1c0,5.1,3.5,9.3,8.4,10.4C7.5,31.9,7,30,7,28z"/> <path fill="#FFFFFF" d="M34.3,31c-1,3.9-4.4,6.6-8.4,6.6c-0.7,0-1.4-0.1-2.1-0.3c-1-0.3-2-0.7-2.8-1.3c-0.9-0.6-1.6-1.4-2.2-2.2 c-1.3-2-1.9-4.4-1.3-6.9c1-3.9,4.4-6.6,8.4-6.6c0.7,0,1.4,0.1,2.1,0.3c2.2,0.6,4.1,1.9,5.3,3.9C34.5,26.4,34.9,28.8,34.3,31"/> <path opacity="0.1" fill="#59B4D9" d="M34.3,31c-1,3.9-4.4,6.6-8.4,6.6c-0.7,0-1.4-0.1-2.1-0.3c-1-0.3-2-0.7-2.8-1.3 c-0.9-0.6-1.6-1.4-2.2-2.2c-1.3-2-1.9-4.4-1.3-6.9c1-3.9,4.4-6.6,8.4-6.6c0.7,0,1.4,0.1,2.1,0.3c2.2,0.6,4.1,1.9,5.3,3.9 C34.5,26.4,34.9,28.8,34.3,31"/> <path opacity="0.3" fill="#59B4D9" d="M30.6,21.7c-0.8-0.5-1.7-0.9-2.6-1.1c-0.7-0.2-1.4-0.3-2.1-0.3c-4,0-7.4,2.7-8.4,6.6 c-0.6,2.5-0.1,5,1.3,6.9c0.2,0.3,0.5,0.7,0.8,1C21.4,29.1,25.4,24.4,30.6,21.7"/> <path fill="#3E3E3E" d="M36.5,22.6c-1.7-2.8-4.4-4.8-7.6-5.6c-1-0.2-2-0.4-3-0.4c-5.7,0-10.6,3.9-12,9.4c-0.8,3.1-0.3,6.3,1.3,9.1 l-9.4,9.5c-1.2,1.2-1.2,3.3,0,4.5C6.5,49.7,7.3,50,8.1,50c0.8,0,1.6-0.3,2.3-0.9l9.4-9.5c1,0.6,2.1,1,3.2,1.3c1,0.2,2,0.4,3,0.4 c5.7,0,10.6-3.9,12-9.4C38.7,28.7,38.2,25.4,36.5,22.6z M34.3,31c-1,3.9-4.4,6.6-8.4,6.6c-0.7,0-1.4-0.1-2.1-0.3 c-1-0.3-2-0.7-2.8-1.3c-0.9-0.6-1.6-1.4-2.2-2.2c-1.3-2-1.9-4.4-1.3-6.9c1-3.9,4.4-6.6,8.4-6.6c0.7,0,1.4,0.1,2.1,0.3 c2.2,0.6,4.1,1.9,5.3,3.9C34.5,26.5,34.9,28.8,34.3,31z"/> <path opacity="0.5" fill="#1E1E1E" d="M18.9,39.1c-1.3-0.9-2.3-1.9-3.2-3.2c-0.2-0.3-0.3-0.5-0.5-0.8L14.4,36l-0.1,0.1 c0.1,0.2,0.2,0.4,0.4,0.6c1,1.4,2.1,2.6,3.5,3.6c0.1,0.1,0.4,0.2,0.7,0.3l0.9-0.9C19.4,39.4,19.2,39.3,18.9,39.1z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#search"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                tier: "free",
                units: 1,
                hours: 1,
                unitsFactor: "1"
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            if (i && i.offers[t.tier]) return i.offers[t.tier].prices[t.region] * t.hours * (t.hoursFactor || "1") * t.units
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i && i.offers[t.tier] ? i.offers[t.tier].skus[t.region] : ""
        },
        getDescription: function (n) {
            return n.tier === "free" ? "Free" : Core.Util.FormatString("{0} unit(s) x {1} {2}", n.units, n.hours, factorLabel(n.hoursFactor))
        },
        willUpdate: function (n, t) {
            return n.hoursFactor !== t.hoursFactor && (t.hours = factorInput(n.hoursFactor, t.hoursFactor, n.hours)), t
        },
        isValidOffer: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier].prices[t.region] >= 0 : !1
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function r(t) {
        var i = n.getPricingApiStore().data;
        return i ? t.backupUnits === "1" ? t.backup > 0 && t.backup <= 50 ? i.offers["1gb"].prices[t.region] * t.instances : t.backup >= 51 && t.backup <= 500 ? i.offers["50gb"].prices[t.region] * t.instances : t.backup > 500 ? i.offers["500gb"].prices[t.region] * Math.ceil(t.backup / 500) * t.instances : 0 : i.offers["500gb"].prices[t.region] * Math.ceil(t.backup * t.backupUnits / 500) * t.instances : 0
    }

    function f(n) {
        return n.backupUnits === "1" ? "GB" : n.backupUnits === "1024" ? "TB" : void 0
    }

    function u(t) {
        var i = n.getPricingApiStore().data;
        return i ? getGraduatedPrice(i.storageOffers["block-basic-" + t.redundancy + "-" + t.region].prices, t.backup * t.backupUnits) * t.instances : 0
    }

    function e(t) {
        var i = n.getPricingApiStore().data,
            r;
        return i ? (r = i.offers["1gb"], t.backupUnits === "1" ? t.backup >= 51 && t.backup <= 500 ? r = i.offers["50gb"] : t.backup > 500 && (r = i.offers["500gb"]) : r = i.offers["500gb"], r) : 0
    }
    var t = "Backup",
        i, n;
    i = React.createClass({
        displayName: "SiteRecovery",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                i = n.dataStore.pricingData,
                e = [{
                    slug: "1",
                    displayName: "GB"
                }, {
                    slug: "1024",
                    displayName: "TB"
                }].map(function (n) {
                    return {
                        slug: n.slug,
                        values: [n.displayName]
                    }
                });
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: i.regions,
                defaultValue: n.region,
                onChange: this.onChange
            }))), React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "instances",
                min: "1",
                max: "9999",
                defaultValue: n.instances,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: n.backupUnits + "size",
                name: "backup",
                defaultValue: n.backup,
                factorsName: "backupUnits",
                factorsDefault: n.backupUnits || "1",
                factorUnit: "gbs",
                min: "0",
                max: "5000",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(n),
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku && n.sku.backup))))), React.createElement("div", {
                className: "cost detail sub-module"
            }, React.createElement("h3", null, "Storage"), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Capacity",
                name: "redundancy",
                options: i.redundancies,
                defaultValue: n.redundancy,
                onChange: this.onChange
            }))), React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "2px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, n.backup * n.instances), React.createElement("label", {
                className: "label"
            }, f(n))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u(n),
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku && n.sku.storage))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "backup",
        displayName: t,
        description: "Simple and reliable server backup to the cloud",
        pricingApi: "/api/v1/pricing/backup/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="backup" viewBox="0 0 50 50"> <path fill="#0072C6" d="M45.083,14.967c0.033-0.35,0.05-0.717,0.05-1.083c0-5.817-4.783-10.55-10.65-10.55 C31,3.333,27.8,5,25.833,7.733C24.567,6.95,23.1,6.517,21.567,6.517c-4.183,0-7.633,3.183-8.017,7.233 c0.65-0.083,1.3-0.15,1.967-0.15c3.083,0,6.05,1,8.467,2.767C25.8,12.183,30.417,9.5,35.533,9.35V5.767l6.25,5.35l-6.25,5.317v-3.5 C32.6,13.05,29.75,14.15,28.1,16.817l0.333-0.033c5.967,0,10.9,4.467,11.6,10.183c1.417,1.067,2.533,2.35,3.333,3.817 C47.233,29.75,50,26.417,50,22.333C50,19.05,48.233,16.433,45.083,14.967z"/> <path fill="#59B4D9" d="M4.917,28.833c-0.033-0.367-0.05-0.733-0.05-1.1c0-5.817,4.783-10.533,10.65-10.533 c3.483,0,6.683,1.667,8.65,4.383c1.267-0.783,2.733-1.2,4.267-1.2c4.433,0,8.05,3.583,8.05,7.983L36.467,29 c3,1.517,4.617,4.033,4.617,7.183c0,4.95-4.033,8.817-9.183,8.817H9.183C4.033,45,0,41.133,0,36.183 C0,32.917,1.767,30.3,4.917,28.833z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#backup"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                instances: 1,
                backup: 0,
                backupUnits: "1",
                redundancy: "lrs"
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? r(t) + u(t) : 0
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getSku: function (t) {
            var r = n.getPricingApiStore().data,
                i = {},
                u;
            return r ? (u = e(t), i.backup = u.skus[t.region], i.storage = r.storageOffers["block-basic-" + t.redundancy + "-" + t.region].sku, i) : undefined
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0} instance(s), {1} {2}, {3} {2} {4} of storage", n.instances, n.backup, {
                1: "GB",
                1024: "TB"
            }[n.backupUnits], n.instances * n.backup, n.redundancy)
        },
        isValidOffer: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? !!i.storageOffers["block-basic-" + t.redundancy + "-" + t.region] : !1
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function u() {
        var n = Acom.Calculator.Stores.channelCalculator.currentDiscount(),
            t = !0;
        return ["ea"].forEach(function (i) {
            n && n.indexOf(i) === 0 && (t = !1)
        }), t
    }

    function f(i) {
        var u = n.getPricingApiStore().data,
            r;
        if (["usgov-iowa", "usgov-virginia"].indexOf(i.region) >= 0) return "Government Zone";
        r = t(i, u);
        switch (r) {
            case "zone1":
                return Core.Util.FormatString("{0}: {1}, {2}", "Zone 1", "North America", "Europe");
            case "zone2":
                return Core.Util.FormatString("{0}: {1}, {2}, {3}", "Zone 2", "Asia Pacific", "Japan", "Australia");
            case "zone3":
                return Core.Util.FormatString("{0}: {1}", "Zone 3", "Brazil");
            case "zone4":
                return Core.Util.FormatString("{0}", "DE (trustee): Germany");
            default:
                return ""
        }
        return ""
    }

    function t(n, t) {
        for (var i in t.availableRegionsPerZone)
            if (t.availableRegionsPerZone[i].indexOf(n.region) >= 0) return i;
        return ""
    }
    var i = "Bandwidth",
        r, n;
    r = React.createClass({
        displayName: "Bandwidth",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                i = n.dataStore.pricingData,
                t;
            return t = n.displaySku ? React.createElement(Tooltip, null, React.createElement("p", null, " Bandwidth refer to data moving in and out of Azure data centers other than those explicitly covered by the Content Delivery Network or ExpressRoute pricing. Data going into Azure data centers is free, you are charged for data going out of Azure data centers. The first 5GB/Month of Bandwidth is free."), React.createElement("ul", null, React.createElement("li", null, "  Zone 1: US West, US East, US North Central, US  South Central, US East 2, US Central, Europe West,  Europe North, Canada East, Canada Central "), " ", React.createElement("li", null, "  Zone 2: Asia Pacific East, Asia Pacific Southeast,  Japan East, Japan West, Australia East, Australia  Southeast "), " ", React.createElement("li", null, "Zone 3: Brazil South"), React.createElement("li", null, "Government Zone: US Gov Virginia, US Gov Iowa"))) : React.createElement(Tooltip, null, React.createElement("p", null, " Bandwidth refer to data moving in and out of Azure data centers other than those explicitly covered by the Content Delivery Network or ExpressRoute pricing. Data going into Azure data centers is free, you are charged for data going out of Azure data centers. The first 5GB/Month of Bandwidth is free."), React.createElement("ul", null, React.createElement("li", null, "  Zone 1: US West, US East, US North Central, US  South Central, US East 2, US Central, Europe West,  Europe North, Canada East, Canada Central "), " ", React.createElement("li", null, "  Zone 2: Asia Pacific East, Asia Pacific Southeast,  Japan East, Japan West, Australia East, Australia  Southeast "), " ", React.createElement("li", null, "Zone 3: Brazil South"))), React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("span", {
                className: "heading3"
            }, "Bandwidth"), t), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: i.regions,
                defaultValue: n.region
            })), displayIf(u(), React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "The first 5GB/Month of data transfer is free in each zone."))), React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("h3", null, f(n)), React.createElement(FactoredInput, {
                key: "factor-storage-" + n.storageUnits,
                name: "units",
                defaultValue: n.units,
                factorsName: "storageUnits",
                factorsDefault: n.storageUnits,
                factorUnit: "gbs",
                min: "0",
                max: n.storageUnits === "1" ? 9999 : 500,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total center"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "data-transfers",
        displayName: i,
        description: "Data transferred out of Azure data centers",
        pricingApi: "/api/v1/pricing/data-transfers/calculator/",
        component: r,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="data-transfers" viewBox="0 0 50 50"> <path fill="#0072C6" d="M6.3,6.9v36.1c0,3.7,8.4,6.8,18.7,6.8V6.9H6.3z"><\/path> <path fill="#0072C6" d="M24.7,49.8H25c10.4,0,18.7-3,18.7-6.8V6.9h-19V49.8z"><\/path> <path opacity="0.15" fill="#FFFFFF" d="M24.7,49.8H25c10.4,0,18.7-3,18.7-6.8V6.9h-19V49.8z"><\/path> <path fill="#FFFFFF" d="M43.7,6.9c0,3.7-8.4,6.8-18.7,6.8s-18.7-3-18.7-6.8c0-3.7,8.4-6.8,18.7-6.8S43.7,3.2,43.7,6.9"><\/path> <path fill="#7FBA00" d="M39.9,6.6C39.9,9,33.2,11,25,11S10.1,9,10.1,6.6c0-2.5,6.7-4.5,14.9-4.5S39.9,4.1,39.9,6.6"><\/path> <path fill="#B8D432" d="M36.8,9.3c2-0.8,3.1-1.7,3.1-2.7c0-2.5-6.7-4.5-14.9-4.5c-8.2,0-14.9,2-14.9,4.5c0,1,1.2,2,3.1,2.7 c2.7-1.1,7-1.7,11.8-1.7C29.8,7.5,34.1,8.2,36.8,9.3"><\/path> <path fill="#FFFFFF" d="M23.7,20c0.8,0.8,1.4,1.6,1.7,2.5c0.3,0.6,0.7,2.1,1.4,4.5l2.1-3.1c0.6-0.8,1.2-1.5,2-2.2 c0.8-0.7,1.5-1.2,2.1-1.4c0.4-0.2,0.8-0.2,1.2-0.2c0.7,0,1.2,0.2,1.6,0.5c0.4,0.4,0.6,0.8,0.6,1.3c0,0.6-0.1,1-0.4,1.2 c-0.4,0.4-0.9,0.6-1.5,0.6c-0.3,0-0.7-0.1-1.1-0.2c-0.7-0.3-1.2-0.4-1.5-0.4c-0.4,0-0.8,0.2-1.3,0.7c-1,0.8-2.1,2.4-3.5,4.7l1.9,8.1 c0.3,1.2,0.6,2,0.8,2.2c0.2,0.2,0.4,0.4,0.6,0.4c0.3,0,0.7-0.2,1.2-0.5c0.9-0.7,1.6-1.7,2.2-2.8l0.8,0.4c-1,1.9-2.2,3.4-3.8,4.6 c-0.9,0.7-1.6,1-2.2,1c-0.9,0-1.6-0.5-2.1-1.5c-0.3-0.6-1-3.3-2.1-7.9c-2.5,4.3-4.4,7-5.9,8.2c-1,0.8-1.9,1.2-2.8,1.2 c-0.6,0-1.2-0.2-1.7-0.7c-0.4-0.3-0.6-0.8-0.6-1.4c0-0.5,0.2-1,0.5-1.3c0.3-0.3,0.8-0.5,1.3-0.5c0.5,0,1,0.3,1.6,0.8 c0.4,0.4,0.7,0.5,0.9,0.5c0.2,0,0.4-0.1,0.7-0.4c0.7-0.6,1.7-1.9,3-3.9s2.1-3.4,2.5-4.3c-1-3.8-1.5-5.8-1.6-6.1 c-0.4-1-0.8-1.7-1.4-2.2c-0.6-0.4-1.4-0.6-2.6-0.6c-0.4,0-0.8,0-1.2,0v-0.8L23.7,20z"><\/path> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#data-transfers"><\/use><\/svg>'
        },
        getInitialState: function () {
            var n = u() ? 5 : 0;
            return {
                region: "us-west",
                units: n,
                storageUnits: "1",
                zone: "zone1"
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? getGraduatedPrice(i.offers[t.region].prices, t.units * t.storageUnits) : 0
        },
        getDisplayName: function (n) {
            return n.name || i
        },
        willUpdate: function (i, r) {
            var u = n.getPricingApiStore().data;
            return i.storageUnits !== r.storageUnits && (r.units = r.storageUnits === "1" ? 5 : 5), r.zone = t(i, u), r
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.region].sku : ""
        },
        getDescription: function (i) {
            var r, u, f;
            if (["usgov-iowa", "usgov-virginia"].indexOf(i.region) >= 0) r = "Government Zone";
            else {
                if (u = n.getPricingApiStore().data, !u) return undefined;
                f = t(i, u);
                switch (f) {
                    case "zone1":
                        r = Core.Util.FormatString("{0} ({1}, {2})", "Zone 1", "North America", "Europe");
                        break;
                    case "zone2":
                        r = Core.Util.FormatString("{0} ({1}, {2}, {3})", "Zone 2", "Asia Pacific", "Japan", "Australia");
                        break;
                    case "zone3":
                        r = Core.Util.FormatString("{0} ({1})", "Zone 3", "Brazil");
                        break;
                    case "zone4":
                        r = Core.Util.FormatString("{0}", "DE (trustee): Germany");
                    default:
                        r = ""
                }
            }
            return Core.Util.FormatString("{0} {1}/Month {2}", i.units, {
                1: "GB",
                1024: "TB"
            }[i.storageUnits], r)
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";
    var t = "Batch",
        i, n;
    i = React.createClass({
        displayName: "Batch",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var i = this.props,
                r = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: i.dataStore.module.icon
            }), " ", React.createElement("span", {
                className: "heading3"
            }, t)), React.createElement("div", {
                className: "detail"
            }, React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "Azure Batch is a free service. Charges accrue for the underlying compute resources that run your Batch workloads, which may be either Cloud Services or Virtual Machine instances. Add Cloud Services and Virtual Machine items to the calculator to estimate the cost of your Batch pools.")), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "batch",
        displayName: t,
        description: "Run large-scale parallel and batch compute jobs",
        pricingApi: "/api/v1/pricing/batch/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="batch" viewBox="0 0 50 50"> <path fill="#0072C6" d="M0,27.2c0,0.7,0.5,1.2,1.2,1.2h27.6c0.7,0,1.2-0.5,1.2-1.2v-20H0V27.2z"/> <path fill="#A0A1A2" d="M28.8,2H1.2C0.5,2,0,2.5,0,3.2v4.4h30V3.2C30,2.5,29.5,2,28.8,2z"/> <path opacity="0.1" fill="#FFFFFF" d="M1.2,2C0.5,2,0,2.5,0,3.2v4.4v2v17.6c0,0.7,0.5,1.2,1.2,1.2h11.5L26.2,2H1.2z"/> <path fill="#FFFFFF" d="M5.1,14.6l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L5.1,14.6z"/> <path fill="#FFFFFF" d="M5.1,22.4l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L5.1,22.4z"/> <path fill="#3999C6" d="M10,37.2c0,0.7,0.5,1.2,1.2,1.2h27.6c0.7,0,1.2-0.5,1.2-1.2v-20H10V37.2z"/> <path fill="#A0A1A2" d="M38.8,12H11.2c-0.7,0-1.2,0.5-1.2,1.2v4.4h30v-4.4C40,12.5,39.5,12,38.8,12z"/> <path opacity="0.1" fill="#FFFFFF" d="M11.2,12c-0.7,0-1.2,0.5-1.2,1.2v4.4v2v17.6c0,0.7,0.5,1.2,1.2,1.2h11.5L36.2,12H11.2z"/> <path fill="#FFFFFF" d="M15.1,24.6l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L15.1,24.6z"/> <path fill="#FFFFFF" d="M15.1,32.4l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L15.1,32.4z"/> <path fill="#59B4D9" d="M20,47.2c0,0.7,0.5,1.2,1.2,1.2h27.6c0.7,0,1.2-0.5,1.2-1.2v-20H20V47.2z"/> <path fill="#A0A1A2" d="M48.8,22H21.2c-0.7,0-1.2,0.5-1.2,1.2v4.4h30v-4.4C50,22.5,49.5,22,48.8,22z"/> <rect x="20" y="27.6" opacity="0.15" fill="#FFFFFF" width="30" height="2"/> <path opacity="0.1" fill="#FFFFFF" d="M21.2,22c-0.7,0-1.2,0.5-1.2,1.2v4.4v2v17.6c0,0.7,0.5,1.2,1.2,1.2h11.5L46.2,22H21.2z"/> <path fill="#FFFFFF" d="M25.1,34.6l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L25.1,34.6z"/> <rect x="33.2" y="34.5" opacity="0.6" fill="#FFFFFF" width="12" height="2"/> <path fill="#FFFFFF" d="M25.1,42.4l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L25.1,42.4z"/> <rect x="33.2" y="42.4" opacity="0.6" fill="#FFFFFF" width="12" height="2"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#batch"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-west"
            }
        },
        getPrice: function () {
            var t = n.getPricingApiStore().data;
            return t ? 0 : undefined
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getDescription: function () {
            return "Free tier"
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function t(t) {
        var i = n.getPricingApiStore().data,
            r;
        return i ? (r = t.tier === "standard" ? "" : "premium-", {
            zone1: getGraduatedPrice(i.offers["cdn-" + t.provider + "-" + r + "zone1"].prices, t.zone1 * t.zoneOneStorageUnits),
            zone2: getGraduatedPrice(i.offers["cdn-" + t.provider + "-" + r + "zone2"].prices, t.zone2 * t.zoneTwoStorageUnits),
            zone3: getGraduatedPrice(i.offers["cdn-" + t.provider + "-" + r + "zone3"].prices, t.zone3 * t.zoneThreeStorageUnits),
            zone4: getGraduatedPrice(i.offers["cdn-" + t.provider + "-" + r + "zone4"].prices, t.zone4 * t.zoneFourStorageUnits),
            zone5: getGraduatedPrice(i.offers["cdn-" + t.provider + "-" + r + "zone5"].prices, t.zone5 * t.zoneFiveStorageUnits)
        }) : undefined
    }
    var i = "Content Delivery Network",
        r, n;
    r = React.createClass({
        displayName: "Cdn",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                r = n.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: i,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Provider",
                name: "provider",
                options: r.suppliers,
                defaultValue: n.provider,
                onChange: this.onChange
            }), displayIf(n.provider === "verizon", React.createElement(CalculatorDropdown, {
                label: "Tier",
                name: "tier",
                options: r.tiers,
                defaultValue: n.tier,
                onChange: this.onChange
            })))), React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("h3", null, "CDN Zone 1: North America, Europe"), React.createElement(FactoredInput, {
                key: "factor-zone1-" + n.zoneOneStorageUnits,
                name: "zone1",
                defaultValue: n.zone1,
                factorsName: "zoneOneStorageUnits",
                factorsDefault: n.zoneOneStorageUnits,
                factorUnit: "gbs",
                min: "0",
                max: "5000",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(n).zone1,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.zone1, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.zone1))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "CDN Zone 2: Asia Pacific, Japan"), React.createElement(FactoredInput, {
                key: "factor-zone2-" + n.zoneTwoStorageUnits,
                name: "zone2",
                defaultValue: n.zone2,
                factorsName: "zoneTwoStorageUnits",
                factorsDefault: n.zoneTwoStorageUnits,
                factorUnit: "gbs",
                min: "0",
                max: "5000",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(n).zone2,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.zone2, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.zone2))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "CDN Zone 3: Brazil"), React.createElement(FactoredInput, {
                key: "factor-zone3-" + n.zoneThreeStorageUnits,
                name: "zone3",
                defaultValue: n.zone3,
                factorsName: "zoneThreeStorageUnits",
                factorsDefault: n.zoneThreeStorageUnits,
                factorUnit: "gbs",
                min: "0",
                max: "5000",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(n).zone3,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.zone3, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.zone3))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "CDN Zone 4: Australia"), React.createElement(FactoredInput, {
                key: "factor-zone4-" + n.zoneFourStorageUnits,
                name: "zone4",
                defaultValue: n.zone4,
                factorsName: "zoneFourStorageUnits",
                factorsDefault: n.zoneFourStorageUnits,
                factorUnit: "gbs",
                min: "0",
                max: "5000",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(n).zone4,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.zone4, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.zone4))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "CDN Zone 5: India"), React.createElement(FactoredInput, {
                key: "factor-zone5-" + n.zoneFiveStorageUnits,
                name: "zone5",
                defaultValue: n.zone5,
                factorsName: "zoneFiveStorageUnits",
                factorsDefault: n.zoneFiveStorageUnits,
                factorUnit: "gbs",
                min: "0",
                max: n.zoneFiveStorageUnits === "1" ? 5e3 : 500,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(n).zone5,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.zone5, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.zone5))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "cdn",
        displayName: i,
        description: "Ensure secure, reliable content delivery with broad global reach",
        pricingApi: "/api/v1/pricing/cdn/calculator/",
        component: r,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="cdn" viewBox="0 0 50 50"> <path fill="#7A7A7A" d="M34.9,16.8H8.3c-1.1,0-2-0.9-2-2v0c0-1.1,0.9-2,2-2h26.6c1.1,0,2,0.9,2,2v0C36.9,15.9,36,16.8,34.9,16.8z"/> <path fill="#7A7A7A" d="M29.5,33.5H4.9c-1.1,0-2-0.9-2-2v0c0-1.1,0.9-2,2-2h24.6c1.1,0,2,0.9,2,2v0C31.5,32.6,30.6,33.5,29.5,33.5z"/> <path fill="#7A7A7A" d="M26.6,25.4H2c-1.1,0-2-0.9-2-2v0c0-1.1,0.9-2,2-2h24.6c1.1,0,2,0.9,2,2v0C28.6,24.5,27.7,25.4,26.6,25.4z"/> <path fill="#3999C6" d="M50,29.2c0-2.4-1.9-4.3-4.2-4.3c-0.2,0-0.3,0-0.6,0c0.2-0.9,0.4-1.9,0.4-3c0-6.2-5.1-11.2-11.2-11.2\tc-4.9,0-9.1,3.3-10.6,7.6c-0.8-0.2-1.6-0.4-2.5-0.4c-4.3,0-7.6,3.5-7.6,7.8s3.4,7.8,7.6,7.8l0,0l0,0H46l0,0\tC48.3,33.2,50,31.4,50,29.2"/> <path fill="#FFFFFF" style="opacity:0.2;enable-background:new;" d="M25.3,33.4c-1-1-1.8-2.2-2.1-3.8c-0.9-4.2,1.6-8.3,5.7-9.2c0.9-0.2,1.7-0.2,2.6-0.1c0.3-3.9,2.7-7.3,6.3-9 c-1.1-0.3-2.2-0.6-3.4-0.6c-4.9,0-9.1,3.3-10.6,7.6c-0.8-0.2-1.6-0.4-2.5-0.4c-4.3,0-7.6,3.5-7.6,7.8s3.4,7.8,7.6,7.8l0,0l0,0 L25.3,33.4L25.3,33.4z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#cdn"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                tier: "standard",
                provider: "verizon",
                zone1: 0,
                zoneOneStorageUnits: "1",
                zone2: 0,
                zoneTwoStorageUnits: "1",
                zone3: 0,
                zoneThreeStorageUnits: "1",
                zone4: 0,
                zoneFourStorageUnits: "1",
                zone5: 0,
                zoneFiveStorageUnits: "1"
            }
        },
        getPrice: function (i) {
            var e = n.getPricingApiStore().data,
                u = 0,
                f, r;
            if (!e) return 0;
            r = t(i);
            for (f in r) u += r[f];
            return u
        },
        getDisplayName: function (n) {
            return n.name || i
        },
        willUpdate: function (t, i) {
            var r = n.getPricingApiStore().data;
            return t.zoneFiveStorageUnits !== i.zoneFiveStorageUnits && (i.zone5 = 5), t.provider === "verizon" && i.provider === "akamai" && (i.tier = "standard"), i
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data,
                r;
            return i ? (r = t.tier === "standard" ? "" : "premium-", {
                zone1: i.offers["cdn-" + t.provider + "-" + r + "zone1"].sku,
                zone2: i.offers["cdn-" + t.provider + "-" + r + "zone2"].sku,
                zone3: i.offers["cdn-" + t.provider + "-" + r + "zone3"].sku,
                zone4: i.offers["cdn-" + t.provider + "-" + r + "zone4"].sku,
                zone5: i.offers["cdn-" + t.provider + "-" + r + "zone5"].sku
            }) : ""
        },
        getDescription: function (n) {
            var t = {
                1: "GB",
                1024: "TB"
            };
            return Core.Util.FormatString("{0} {1}/Month Zone1, {2} {3}/Month Zone 2, {4} {5}/Month Zone 3, {6} {7}/Month Zone 4, {8} {9}/Month Zone 5, {10} {11}/Month Zone 6", n.zone1, t[n.zoneOneStorageUnits], n.zone2, t[n.zoneTwoStorageUnits], n.zone3, t[n.zoneThreeStorageUnits], n.zone4, t[n.zoneFourStorageUnits], n.zone5, t[n.zoneFiveStorageUnits])
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function t(t, i) {
        var u = n.getPricingApiStore().data,
            r;
        return u ? (r = u.offers[i], typeof r.prices[t] != "undefined" && r) : undefined
    }

    function f(n, i) {
        var r = t(n, i);
        return r && r.prices[n]
    }

    function i(n, i) {
        return !!t(n, i)
    }
    var r = "Cloud Services",
        u, n;
    u = React.createClass({
        displayName: "CloudServices",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                u = n.dataStore.pricingData,
                e = u.sizes.filter(function (t) {
                    return i(n.region, t.slug)
                }).map(function (i) {
                    var e = t(n.region, i.slug),
                        u = ["wa-badge"],
                        r = "{0} GB";
                    switch (i.slug[0]) {
                        case "a":
                            u.push("wa-badge-green");
                            r = "{0} GB";
                            break;
                        case "d":
                            u.push("wa-badge-blue");
                            r = "{0} GB SSD";
                            break;
                        case "g":
                            u.push("wa-badge-green");
                            r = "{0} GB SSD";
                            break;
                        case "h":
                            u.push("wa-badge-blue");
                            r = "{0} GB SSD";
                            break;
                        case "l":
                            u.push("wa-badge-blue");
                            r = "{0} GB"
                    }
                    return {
                        slug: i.slug,
                        values: {
                            displayStrings: [i.displayName, formatString("{0} cores", e.cores), formatString("{0} GB RAM", e.ram), formatString(r, e.diskSize)],
                            number: {
                                value: f(n.region, i.slug),
                                decimals: 3,
                                format: "currency",
                                rate: "{0}/hr"
                            }
                        }
                    }
                });
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: r,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: u.regions,
                defaultValue: n.region
            })), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "size-" + n.region,
                label: "Instance size:",
                name: "size",
                options: e,
                delimiters: ["colon", "comma"],
                defaultValue: n.size,
                onChange: this.onChange
            }))), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "instances",
                min: "1",
                max: "999",
                defaultValue: n.instances,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hours-" + n.hoursFactor,
                name: "hours",
                defaultValue: n.hours,
                factorsName: "hoursFactor",
                factorsDefault: n.hoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "cloud-services",
        displayName: r,
        description: "Create highly-available, infinitely-scalable cloud applications and APIs",
        pricingApi: "/api/v1/pricing/cloud-services/calculator/",
        component: u,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="cloud-services" viewBox="0 0 50 50"> <path fill="#3E3E3E" d="M43.339,18.659c0.195-0.911,0.291-1.779,0.291-2.643C43.63,9.39,38.232,4,31.595,4 c-4.631,0-8.8,2.622-10.81,6.736c-1.619-1.61-3.809-2.523-6.114-2.523c-4.763,0-8.638,3.875-8.638,8.637 c0,0.646,0.072,1.298,0.218,1.968C2.328,20.416,0,23.731,0,27.763c0,5.437,4.443,9.696,10.113,9.696h0.646 c0.11,4.968,4.18,8.975,9.164,8.975c3.355,0,6.393-1.809,7.996-4.681c1.206,1.045,2.748,1.628,4.36,1.628 c3.42,0,6.249-2.591,6.65-5.922h0.961c5.67,0,10.11-4.259,10.11-9.696C50,23.564,47.456,20.109,43.339,18.659"/> <path fill="#FFFFFF" d="M39.437,23.192l0.736-1.743l-0.213-0.184l-1.607-1.396l0.008-1.411l1.812-1.62l-0.713-1.753l-0.279,0.019 l-2.125,0.152l-0.992-1.006l0.135-2.428l-1.742-0.735l-0.184,0.212l-1.397,1.609l-1.412-0.01l-1.621-1.81l-1.752,0.711l0.02,0.281 l0.15,2.125l-1.004,0.99l-2.428-0.135l-0.736,1.743l0.213,0.184l1.608,1.397l-0.009,1.412l-1.81,1.621l0.711,1.752l0.281-0.021 l2.123-0.149l0.992,1.005l-0.135,2.426l1.743,0.736l0.184-0.213l1.396-1.608l1.412,0.01l1.621,1.812l1.752-0.712l-0.02-0.282 l-0.15-2.124l1.006-0.992L39.437,23.192z M30.628,22.693c-1.971-0.831-2.894-3.102-2.062-5.071c0.833-1.972,3.102-2.894,5.072-2.063 c1.97,0.832,2.893,3.103,2.062,5.073C34.868,22.602,32.599,23.525,30.628,22.693"/> <path fill="#FFFFFF" d="M28.357,31.948v-1.893l-0.266-0.086l-2.025-0.663l-0.539-1.304l1.04-2.198l-1.336-1.337l-0.251,0.127 l-1.899,0.962l-1.305-0.541l-0.818-2.289l-1.891-0.002l-0.087,0.269l-0.663,2.023l-1.304,0.539l-2.198-1.039l-1.337,1.337 l0.127,0.251l0.962,1.9l-0.54,1.302l-2.29,0.819l-0.001,1.891l0.267,0.088l2.025,0.661l0.539,1.306l-1.04,2.196l1.336,1.34 l0.251-0.128l1.901-0.964l1.302,0.541l0.819,2.289l1.891,0.001l0.087-0.266l0.663-2.025l1.305-0.539l2.196,1.04l1.339-1.336 l-0.127-0.251l-0.964-1.899l0.542-1.305L28.357,31.948z M20.044,34.908c-2.138-0.001-3.869-1.736-3.869-3.874 c0.002-2.139,1.736-3.87,3.875-3.869c2.139,0.001,3.871,1.735,3.869,3.874C23.918,33.177,22.183,34.909,20.044,34.908"/> <path fill="#B8D432" d="M34.449,20.103c-0.539,1.279-2.014,1.878-3.293,1.338c-1.279-0.54-1.878-2.014-1.338-3.293 c0.54-1.277,2.014-1.878,3.293-1.338C34.389,17.35,34.988,18.824,34.449,20.103"/> <path fill="#B8D432" d="M22.561,31.037c-0.001,1.389-1.128,2.514-2.515,2.513c-1.388-0.001-2.512-1.127-2.511-2.516 c0.001-1.388,1.127-2.513,2.513-2.512C21.437,28.523,22.562,29.649,22.561,31.037"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#cloud-services"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                size: "a0",
                instances: 1,
                hours: 744,
                hoursFactor: "1"
            }
        },
        getPrice: function (t) {
            if (!n.getPricingApiStore().data) return 0;
            var i = f(t.region, t.size);
            return i * t.instances * t.hours * (t.hoursFactor || "1")
        },
        getDisplayName: function (n) {
            return n.name || r
        },
        willUpdate: function (t, r) {
            var e = n.getPricingApiStore().data,
                u, f;
            if (!i(r.region, r.size))
                for (f = 0; u = e.sizes[f]; f++)
                    if (i(r.region, u.slug)) {
                        r.size = u.slug;
                        break
                    }
            return t.hoursFactor !== r.hoursFactor && (r.hours = factorInput(t.hoursFactor, r.hoursFactor, t.hours)), r
        },
        getSku: function (i) {
            if (!n.getPricingApiStore().data) return "";
            var r = t(i.region, i.size);
            return r && r.skus[i.region] ? r && r.skus[i.region] : ""
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0} instance(s), {1} {2}, {3} size", n.instances, n.hours, factorLabel(n.hoursFactor), n.size)
        },
        isValidOffer: function (n) {
            return i(n.region, n.size)
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function st(n) {
        var t = u.getPricingApiStore().data,
            i, r;
        if (!t) return "";
        for (r in t) t[r].slug === n && (i = r);
        return t[i].regions[0] ? t[i].regions[0].slug : null
    }

    function ot(n) {
        var t = u.getPricingApiStore().data,
            r, i;
        if (!t) return "";
        for (i in t) t[i].slug === n && (r = i);
        return t[r].regions
    }

    function t(n) {
        var t = u.getPricingApiStore().data;
        return t ? {
            autoSuggest: t.autosuggest.offers[n.autoSuggestSize].overagePrice.global,
            spellCheck: t.spellCheck.offers[n.spellCheckSize].overagePrice.global,
            search: t.search.offers[n.searchSize].overagePrice.global,
            textAnalytics: t.textAnalytics.offers[n.textAnalyticsSize].overagePrice[n.region],
            recommendations: t.recommendations.offers[n.recommendationsSize].overagePrice[n.region],
            computerVision: t.computerVision.offers[n.computerVisionTier].prices[n.region],
            emotionApi: t.emotionApi.offers[n.emotionTier].prices[n.region],
            languageUnderstandingIntelligentServices: t.languageUnderstandingIntelligentServices.offers.basic.prices[n.region],
            speechtotext: t.speechApi.offers.speechtotext.prices[n.region],
            texttospeech: t.speechApi.offers.texttospeech.prices[n.region],
            webLanguageModel: t.webLanguageModel.offers.standard.prices[n.region],
            speakerRecognitionApiService: t.speakerRecognitionApi.offers[n.speakerRecognitionApi + "-" + n.region] ? t.speakerRecognitionApi.offers[n.speakerRecognitionApi + "-" + n.region].prices : 0,
            academicKnowledge: t.academicKnowledgeApi.offers[n.academicKnowledgeTier].prices[n.region]
        } : 0
    }

    function rt(n) {
        var t = u.getPricingApiStore().data;
        return t ? {
            transactions: getGraduatedPrice(t.faceApi.graduatedOffers["face-api-standard"].prices, n.faceTransactions, r(n).faceApi),
            faceStorage: Math.ceil(n.faceStorage / r(n).faceApi) * t.faceApi.offers["face-storage"].prices[n.region]
        } : 0
    }

    function s(n) {
        var t = u.getPricingApiStore().data;
        return t ? {
            textAnalytics: t.textAnalytics.offers[n.textAnalyticsSize].maximumTransactions.toLocaleString(Acom.currentCulture),
            recommendations: t.recommendations.offers[n.recommendationsSize].maximumTransactions.toLocaleString(Acom.currentCulture),
            autosuggest: t.autosuggest.offers[n.autoSuggestSize].maximumTransactions.toLocaleString(Acom.currentCulture),
            spellcheck: t.spellCheck.offers[n.spellCheckSize].maximumTransactions.toLocaleString(Acom.currentCulture),
            search: t.search.offers[n.searchSize].maximumTransactions.toLocaleString(Acom.currentCulture),
            speechApi: t.speechApi.offers.free.maximumTransactions.toLocaleString(Acom.currentCulture),
            webLanguageModel: t.webLanguageModel.offers.free.maximumTransactions.toLocaleString(Acom.currentCulture)
        } : 0
    }

    function ht(n) {
        var t = "";
        switch (n.api) {
            case c:
                t = s(n).autosuggest;
                break;
            case v:
                t = s(n).spellcheck;
                break;
            case a:
                t = s(n).search
        }
        return formatString("{0} included transactions", t)
    }

    function r(t) {
        var i = u.getPricingApiStore().data;
        return i ? {
            autosuggest: i.autosuggest.overageIncrement,
            spellcheck: i.spellCheck.overageIncrement,
            search: i.search.overageIncrement,
            academicKnowledge: t.academicKnowledgeTier !== n ? i.academicKnowledgeApi.offers[t.academicKnowledgeTier].transactionIncrement.toString() : "",
            computerVision: t.computerVisionTier !== n ? i.computerVision.offers[t.computerVisionTier].transactionIncrement.toString() : "",
            faceApi: t.faceTier !== n ? i.faceApi.graduatedOffers["face-api-standard"].transactionIncrement.toString() : "",
            emotionApi: t.emotionTier !== n ? i.emotionApi.offers[t.emotionTier].transactionIncrement.toString() : "",
            languageUnderstandingIntelligentServices: t.languageTier !== n ? i.languageUnderstandingIntelligentServices.offers[t.languageTier].transactionIncrement.toString() : "",
            webLanguageModel: i.webLanguageModel.offers[t.webLanguageModelTier].transactionIncrement.toString()
        } : 0
    }

    function f(n, t, i, r) {
        var u = n[t];
        return u[i] && u[i][r] ? u[i][r] : ""
    }

    function ft(t) {
        var i = u.getPricingApiStore().data;
        return i ? t.customSpeechServiceTier === n ? 0 : i.customSpeechServiceOffering.offers[t.customSpeechServiceTier].acousticAdaptationPrice[t.region] : 0
    }
    var ut = "Cognitive Services",
        et, u, c = "autosuggest-api",
        h = "text-analytics",
        l = "recommendations",
        a = "search-api",
        v = "spellcheck-api",
        e = "speech-api",
        y = "emotion-api",
        p = "language-understanding-intelligent-services",
        w = "web-language-model",
        b = "academic-knowledge-api",
        k = "computer-vision",
        d = "translator-speech-api",
        g = "translator-text-api",
        it = "speaker-recognition-api",
        nt = "face-api",
        i = "content-moderator",
        tt = "custom-speech-service",
        n = "free",
        o = "s1";
    et = React.createClass({
        displayName: "CognitiveServices",
        onChange: Acom.Calculator.onChange,
        getServiceInfo: function (t) {
            var r = this.props.dataStore.pricingData,
                u = r.emotionApi.offers.free,
                f = r.emotionApi.offers.standard;
            switch (t.api) {
                case h:
                    return formatString("Max. transactions included {0}", s(t).textAnalytics);
                case l:
                    return formatString("Max. transactions included {0}", s(t).recommendations);
                case k:
                    return t.computerVisionTier === n ? formatString("{0} included transactions.", r.computerVision.offers.free.maximumTransactions) : "Up to 10 transactions per second";
                case y:
                    if (t.emotionTier === n) return formatReact("{0} Maximum transactions per second<br />{1} Maximum transactions per month<br />{2} Video uploads per month<br />{3} Uploads per minute<br />{4} Status queries per month<br />{5} Queries per minute", u.maximumTransactionsPerSecond.toLocaleString(Acom.currentCulture), u.maximumTransactions.toLocaleString(Acom.currentCulture), u.videoUploads.toLocaleString(Acom.currentCulture), u.uploadsPerMinute.toLocaleString(Acom.currentCulture), u.statusQueries.toLocaleString(Acom.currentCulture), u.queriesPerMinute.toLocaleString(Acom.currentCulture));
                    if (t.emotionTier === "basic") return "Up to 10 transactions per second, Face Rectangle specified";
                    if (t.emotionTier === "standard") return formatReact("{0} Maximum transactions per second<br />{1} Video uploads per month<br />{2} Uploads per minute<br />{3} Status queries per month<br />{4} Queries per minute", f.maximumTransactionsPerSecond.toLocaleString(Acom.currentCulture), f.videoUploads.toLocaleString(Acom.currentCulture), f.uploadsPerMinute.toLocaleString(Acom.currentCulture), f.statusQueries.toLocaleString(Acom.currentCulture), f.queriesPerMinute.toLocaleString(Acom.currentCulture));
                case nt:
                    return t.faceTier === n ? formatString("{0} included transactions. Up to {1} transactions per minute.", r.faceApi.offers["face-api-free"].maximumTransactions, r.faceApi.offers["face-api-free"].maximumTransactionsPerMinute) : "Up to 10 transactions per second";
                case p:
                    return t.languageTier === n ? formatString("{0} included transactions.", r.languageUnderstandingIntelligentServices.offers.free.maximumTransactions) : "5 transactions per second";
                case w:
                    return t.webLanguageModelTier === n ? formatString("{0} transactions included free per month.", s(t).webLanguageModel) : "";
                case b:
                    return t.academicKnowledgeTier === n ? formatString("{0} included transactions.", r.academicKnowledgeApi.offers.free.maximumTransactions) : "";
                case e:
                    return t.speechTier === n ? formatString("{0} transactions free per month", s(t).speechApi) : t.speechTier === "speechtotext" ? "Utterances up to 15 seconds long" : t.speechTier === "longformspeech" ? "Utterances up to 2 minutes long" : "";
                case i:
                    return formatString("{0} transactions per second - {1} maximum characters or {2} MB image size per transaction.", r.contentModerator.offers[i].transactionsPerSecond, r.contentModerator.offers[i].maximumCharacters.toLocaleString(Acom.currentCulture), r.contentModerator.offers[i].maximumImageSize);
                case tt:
                    return t.customSpeechServiceTier === n ? formatReact("{0} concurrent transcriptions<br />{1} Acoustic Model Adaptations (up to 1 hour each)<br />{2} Language Model Adaptations<br />{3} Transcriptions (Short Phrase or Long Dictation)", r.customSpeechServiceOffering.offers.free.maximumConcurrentTranscriptions.toLocaleString(Acom.currentCulture), r.customSpeechServiceOffering.offers.free.maximumAcousticModelAdaptations.toLocaleString(Acom.currentCulture), r.customSpeechServiceOffering.offers.free.maximumLanguageModelAdaptations.toLocaleString(Acom.currentCulture), r.customSpeechServiceOffering.offers.free.maximumTranscriptions.toLocaleString(Acom.currentCulture)) : formatReact("{0} concurrent transcriptions", r.customSpeechServiceOffering.offers[t.customSpeechServiceTier].maximumConcurrentTranscriptions.toLocaleString(Acom.currentCulture))
            }
        },
        render: function () {
            var u = this.props,
                f = u.dataStore.pricingData,
                et = f.autosuggest.tiers.map(function (n) {
                    return {
                        slug: n.slug,
                        displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.autosuggest.offers[n.slug].monthlyPrice.global, 2))
                    }
                }),
                st = f.spellCheck.tiers.map(function (n) {
                    return {
                        slug: n.slug,
                        displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.spellCheck.offers[n.slug].monthlyPrice.global, 2))
                    }
                }),
                ct = f.search.tiers.map(function (n) {
                    return {
                        slug: n.slug,
                        displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.search.offers[n.slug].monthlyPrice.global, 2))
                    }
                }),
                lt = f.textAnalytics.tiers.map(function (n) {
                    return {
                        slug: n.slug,
                        displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.textAnalytics.offers[n.slug].monthlyPrice[u.region], 2))
                    }
                }),
                at = f.recommendations.tiers.map(function (n) {
                    return {
                        slug: n.slug,
                        displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.recommendations.offers[n.slug].monthlyPrice[u.region], 2))
                    }
                }),
                vt = f.customSpeechServiceOffering.tiers.map(function (n) {
                    return {
                        slug: n.slug,
                        displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.customSpeechServiceOffering.offers[n.slug].monthlyPrice[u.region], 2))
                    }
                });
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: u.dataStore.module.icon
            }), " ", React.createElement("span", {
                className: "heading3"
            }, ut, React.createElement("sup", {
                className: "preview normal-font"
            }, "Preview"))), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "API",
                name: "api",
                options: f.serviceTypes,
                defaultValue: u.api
            }), displayIf(ot(u.api).length > 0, React.createElement(CalculatorDropdown, {
                key: u.api,
                label: "Region",
                name: "region",
                options: ot(u.api),
                defaultValue: u.region
            })), displayIf(u.api === c, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: "autosuggest",
                label: "Instance size",
                name: "autoSuggestSize",
                options: et,
                defaultValue: u.autoSuggestSize
            })), displayIf(u.api === v, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: "spellcheck",
                label: "Instance size",
                name: "spellCheckSize",
                options: st,
                defaultValue: u.spellCheckSize
            })), displayIf(u.api === a, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: "search",
                label: "Instance size",
                name: "searchSize",
                options: ct,
                defaultValue: u.searchSize
            })), displayIf(u.api === d, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: "translator-speech-api",
                label: "Tier",
                name: "translatorSpeechTier",
                options: f.translatorSpeech.tiers,
                defaultValue: u.translatorSpeechTier
            })), displayIf(u.api === g, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: "translator-text-api",
                label: "Tier",
                name: "translatorTextTier",
                options: f.translatorText.tiers,
                defaultValue: u.translatorTextTier
            }))), displayIf(u.api === c || u.api === v || u.api === a, React.createElement("p", {
                key: u.autoSuggestSize + u.spellCheckSize + u.searchSize
            }, ht(u))), displayIf(u.api === d, React.createElement("p", {
                key: "translator-speech-" + u.translatorSpeechTier
            }, formatReact("{0} Included hours of speech translation.", f.translatorSpeech.offers[u.translatorSpeechTier].includedHours.toLocaleString(Acom.currentCulture)))), displayIf(u.api === g, React.createElement("p", {
                key: "translator-text-" + u.translatorTextTier
            }, formatReact("{0} Included translated characters.", f.translatorText.offers[u.translatorTextTier].maximumCharacters.toLocaleString(Acom.currentCulture)))), displayIf(u.api === h, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: u.api,
                label: "Instance size",
                name: "textAnalyticsSize",
                options: lt,
                defaultValue: u.textAnalyticsSize
            }))), displayIf(u.api === l, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: u.api,
                label: "Instance size",
                name: "recommendationsSize",
                options: at,
                defaultValue: u.recommendationsSize
            }))), displayIf(u.api === y, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: u.api,
                label: "Tier",
                name: "emotionTier",
                options: f.emotionApi.tiers,
                defaultValue: u.emotionTier
            }))), displayIf(u.api === e, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: u.api,
                label: "Tier",
                name: "speechTier",
                options: f.speechApi.tiers,
                defaultValue: u.speechTier
            }))), displayIf(u.api === w, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: u.api,
                label: "Tier",
                name: "webLanguageModelTier",
                options: f.webLanguageModel.tiers,
                defaultValue: u.webLanguageModelTier
            }))), displayIf(u.api == p, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: "languageUnderstandingIntelligentServices",
                label: "Tier",
                name: "languageTier",
                options: f.languageUnderstandingIntelligentServices.tiers,
                defaultValue: u.languageTier
            }))), displayIf(u.api == k, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: "computerVision",
                label: "Tier",
                name: "computerVisionTier",
                options: f.computerVision.tiers,
                defaultValue: u.computerVisionTier
            }))), displayIf(u.api == nt, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: "faceApi",
                label: "Tier",
                name: "faceTier",
                options: f.faceApi.tiers,
                defaultValue: u.faceTier
            }))), displayIf(u.api == b, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: "academicKnowledge",
                label: "Tier",
                name: "academicKnowledgeTier",
                options: f.academicKnowledgeApi.tiers,
                defaultValue: u.academicKnowledgeTier
            }))), displayIf(u.api === it, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: u.api,
                label: "Service",
                name: "speakerRecognitionApi",
                options: f.speakerRecognitionApi.types,
                defaultValue: u.speakerRecognitionApi
            }))), displayIf(u.api === tt, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                classes: "tier-select",
                key: "custom-speech-service-text-api",
                label: "Tier",
                name: "customSpeechServiceTier",
                options: vt,
                defaultValue: u.customSpeechServiceTier
            }))), this.getServiceInfo(u)), displayIf(u.api === c, React.createElement("div", null, displayIf(u.autoSuggestSize !== o, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.autoSuggestSize,
                label: "Overages",
                name: "autoSuggestOverages",
                min: "0",
                max: 999999999,
                defaultValue: u.autoSuggestOverages,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).autoSuggest,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, formatString("Per {0} transactions", r(u).autosuggest))), React.createElement("div", {
                className: "math"
            }, "+"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.autosuggest.offers[u.autoSuggestSize].monthlyPrice.global,
                decimals: "2",
                format: "currency"
            }))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            })))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            }))))))), displayIf(u.api === v, React.createElement("div", null, displayIf(u.spellCheckSize !== o, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.spellCheckSize,
                label: "Overages",
                name: "spellCheckOverages",
                min: "0",
                max: 999999999,
                defaultValue: u.spellCheckOverages,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).spellCheck,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, formatString("Per {0} transactions", r(u).spellcheck))), React.createElement("div", {
                className: "math"
            }, "+"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.spellCheck.offers[u.spellCheckSize].monthlyPrice.global,
                decimals: "2",
                format: "currency"
            }))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            })))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            }))))))), displayIf(u.api === a, React.createElement("div", null, displayIf(u.searchSize !== o, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.searchSize,
                label: "Overages",
                name: "searchOverages",
                min: "0",
                max: 999999999,
                defaultValue: u.searchOverages,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).search,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, formatString("Per {0} transactions", r(u).search))), React.createElement("div", {
                className: "math"
            }, "+"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.search.offers[u.searchSize].monthlyPrice.global,
                decimals: "2",
                format: "currency"
            }))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            })))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            }))))))), displayIf(u.api === h && u.textAnalyticsSize === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            }))))), displayIf(u.api === h && u.textAnalyticsSize !== n, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.textAnalyticsSize,
                label: "Overages",
                name: "textAnalyticsOverages",
                min: "0",
                max: s(u).textAnalytics,
                defaultValue: u.textAnalyticsOverages,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).textAnalytics,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per 1,000 transactions")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            }))))), displayIf(u.api === l && u.recommendationsSize === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            }))))), displayIf(u.api === l && u.recommendationsSize !== n, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.recommendationsSize,
                label: "Overages",
                name: "recommendationsOverages",
                min: "0",
                max: s(u).recommendations,
                defaultValue: u.recommendationsOverages,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).recommendations,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per 1,000 transactions")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            }))))), displayIf(u.api === k && u.computerVisionTier === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === k && u.computerVisionTier !== n, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.computerVisionTier,
                label: "Transactions",
                name: "computerVisionTransactions",
                min: "0",
                max: 999999999,
                defaultValue: u.computerVisionTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).computerVision,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, formatReact("Per {0} transactions", r(u).computerVision))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === y && u.emotionTier === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
                base: u.sku.monthlySku,
                overage: u.sku.overageSku
            }))))), displayIf(u.api === y && u.emotionTier !== n, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.api,
                label: "Transactions",
                name: "emotionTransactions",
                min: "0",
                max: 999999999,
                defaultValue: u.emotionTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).emotionApi,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, formatReact("Per {0} transactions", r(u).emotionApi))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === nt && u.faceTier === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.transactionSku, React.createElement(SkuLabel, {
                base: u.sku.transactionSku
            }))))), displayIf(u.api === nt && u.faceTier !== n, React.createElement("div", null, React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Transactions"), React.createElement(TextNumber, {
                key: u.api,
                label: "Thousands/mo",
                name: "faceTransactions",
                min: "0",
                max: 2e4,
                defaultValue: u.faceTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: rt(u).transactions,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.transactionSku, React.createElement(SkuLabel, {
                value: u.sku.transactionSku
            })))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h3", null, "Face storage"), React.createElement(TextNumber, {
                key: u.api,
                label: "Faces stored",
                name: "faceStorage",
                min: "0",
                max: 999999999,
                defaultValue: u.faceStorage,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.faceApi.offers["face-storage"].prices[u.region],
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per 1000 faces")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: rt(u).faceStorage,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.faceStorageSku, React.createElement(SkuLabel, {
                value: u.sku.faceStorageSku
            })))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.transactionSku, React.createElement(SkuLabel, {
                value: u.sku.transactionSku
            })))))), displayIf(u.api === p && u.languageTier === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === p && u.languageTier !== n, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.api,
                label: "Transactions",
                name: "languageTransactions",
                min: "0",
                max: 999999999,
                defaultValue: u.languageTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).languageUnderstandingIntelligentServices,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, formatReact("Per {0} transactions", r(u).languageUnderstandingIntelligentServices))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === e && u.speechTier === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === e && u.speechTier === "speechtotext", React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.api,
                label: "Transactions",
                name: "shortSpeechTransactions",
                min: "0",
                max: 999999999,
                defaultValue: u.shortSpeechTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).speechtotext,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per 1,000 transactions")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === e && u.speechTier === "longformspeech", React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.api,
                label: "Hours",
                name: "longSpeechHours",
                min: "0",
                max: 999999999,
                defaultValue: u.longSpeechHours,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === e && u.speechTier === "texttospeech", React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.api,
                label: "Transactions",
                name: "textToSpeechTransactions",
                min: "0",
                max: 999999999,
                defaultValue: u.textToSpeechTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).texttospeech,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per 1,000 transactions")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === w && u.webLanguageModelTier === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === w && u.webLanguageModelTier !== n, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.api,
                label: "Transactions",
                name: "webLanguageModelTransactions",
                min: "0",
                max: 999999999,
                defaultValue: u.webLanguageModelTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).webLanguageModel,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, formatReact("Per {0} transactions", r(u).webLanguageModel))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === it && u.speakerRecognitionApi === "speakerverification", React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.speakerRecognitionApi,
                label: "Thousands/mo",
                name: "speakerverificationTransactions",
                min: "0",
                max: "9999",
                defaultValue: u.speakerverificationTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === it && u.speakerRecognitionApi === "speakeridentification", React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.speakerRecognitionApi,
                label: "Thousands/mo",
                name: "speakeridentificationTransactions",
                min: "0",
                max: "9999",
                defaultValue: u.speakeridentificationTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === b && u.academicKnowledgeTier === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === b && u.academicKnowledgeTier !== n, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: u.academicKnowledgeTier,
                label: "Transactions",
                name: "academicKnowledgeTransactions",
                min: "0",
                max: "999999999",
                defaultValue: u.academicKnowledgeTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(u).academicKnowledge,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, formatReact("Per {0} transactions", r(u).academicKnowledge))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === d && u.translatorSpeechTier === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === d && u.translatorSpeechTier === o, React.createElement("div", {
                className: "cost"
            }, React.createElement(FactoredInput, {
                key: "factor-translatorSpeechHoursFactor-" + u.translatorSpeechHoursFactor,
                name: "translatorSpeechHours",
                defaultValue: u.translatorSpeechHours,
                factorsName: "translatorSpeechHoursFactor",
                factorsDefault: u.translatorSpeechHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "2px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.translatorSpeech.offers.s1.price.global,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per translation", React.createElement("br", null), "hour overage")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === d && u.translatorSpeechTier !== o && u.translatorSpeechTier !== n, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Translator hours above the included amount",
                name: "translatorOverages",
                min: "0",
                max: "9999",
                defaultValue: u.translatorOverages,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "2px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.translatorSpeech.offers[u.translatorSpeechTier].overagePrice.global,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per translation", React.createElement("br", null), "hour overage")), React.createElement("div", {
                className: "math"
            }, "+"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "2px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.translatorSpeech.offers[u.translatorSpeechTier].price.global,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per month")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === g && u.translatorTextTier === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === g && u.translatorTextTier === o, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Millions of characters above the included amount",
                name: "translatedTextCharacters",
                min: "0",
                max: "9999",
                defaultValue: u.translatedTextCharacters,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "2px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.translatorText.offers.s1.price.global,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per million characters")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === g && u.translatorTextTier !== o && u.translatorTextTier !== n, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Millions of characters above the included amount",
                name: "translatedTextCharacters",
                min: "0",
                max: "9999",
                defaultValue: u.translatedTextCharacters,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "2px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.translatorText.offers[u.translatorTextTier].overagePrice.global,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per million", React.createElement("br", null), "character overage")), React.createElement("div", {
                className: "math"
            }, "+"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "2px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.translatorText.offers[u.translatorTextTier].price.global,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per month")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === i, React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                key: i,
                label: "Thousands/mo",
                name: "contentModeratorTransactions",
                min: "0",
                max: "20000",
                defaultValue: u.contentModeratorTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, u.sku)))))), displayIf(u.api === tt && u.customSpeechServiceTier === n, React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.overageSku
            }))))), displayIf(u.api === tt && u.customSpeechServiceTier !== n, React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("h3", null, "Acoustic Adaptation"), React.createElement(TextNumber, {
                key: i,
                label: "Hours",
                name: "customSpeechServiceHours",
                min: "0",
                max: "9999",
                defaultValue: u.customSpeechServiceHours,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per hour",
                value: React.createElement(Acom.Atoms.Number, {
                    value: ft(u),
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.customSpeechServiceHours * ft(u),
                decimals: "2",
                format: "currency"
            }))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h3", null, "Short Phrase Recognition"), React.createElement(TextNumber, {
                key: i,
                label: "Thousands of transcriptions",
                name: "customSpeechServiceShortPhrase",
                min: "0",
                max: "9999",
                defaultValue: u.customSpeechServiceShortPhrase,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: getGraduatedPrice(f.customSpeechServiceOffering.graduatedOffers["short-phrase-recognition"].prices, u.customSpeechServiceShortPhrase, f.customSpeechServiceOffering.graduatedOffers["short-phrase-recognition"].transcriptionIncrement),
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.shortPhraseSku
            })))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h3", null, "Long Phrase Recognition"), React.createElement(TextNumber, {
                key: i,
                label: "Hours",
                name: "customSpeechServiceLongPhrase",
                min: "0",
                max: "9999",
                defaultValue: u.customSpeechServiceLongPhrase,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: getGraduatedPrice(f.customSpeechServiceOffering.graduatedOffers["long-phrase-recognition"].prices, u.customSpeechServiceLongPhrase),
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
                value: u.sku.longPhraseSku
            })))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))))))))
        }
    });
    u = Acom.Calculator.createModule({
        slug: "cognitive-services",
        displayName: ut,
        description: "Add smart API capabilities to enable contextual interactions",
        pricingApi: "/api/v1/pricing/cognitive-services/calculator/",
        component: et,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="cognitive-services" viewBox="-227.333 -143 193.076 114.371"> <path fill="#009580" d="M-36.636-86.307c-3.504-8.302-10.753-15.332-20.133-19.63c-4.324-14.539-16.426-29.079-34.475-29.079 c-0.575,0-1.156,0.015-1.741,0.044c-7.528-5.398-14.84-8.029-22.287-8.029c-4.489,0-9.076,0.991-13.674,2.952 c-3.405-1.785-7.312-2.715-11.487-2.715c-9.237,0-17.998,4.266-23.406,9.264c-1.702-0.401-3.475-0.604-5.304-0.604 c-13.779,0-27.433,11.384-31.124,25.186c-11.877,4.309-20.551,12.139-24.624,22.323c-3.952,9.882-3.083,20.93,2.384,30.313 c5.43,9.319,14.928,14.883,25.408,14.883c4.021,0,7.896-0.821,11.431-2.402c6.372,5.793,14.571,9.256,22.334,9.256 c2.707,0,5.299-0.4,7.749-1.193c6.286,5.17,15.922,7.109,23.74,7.109c9.226,0,17.242-2.437,22.557-6.693 c3.444,1.594,7.237,2.421,11.194,2.42h0.003c9.899,0,20.127-5.274,25.713-12.607c3.116,1.277,6.396,1.938,9.712,1.938 c0,0,0.002,0,0.003,0c10.816-0.002,20.86-7.063,25.589-17.989C-33.47-69.889-33.318-78.446-36.636-86.307z"/> <path fill="#FFFFFF" d="M-165.281-34.625v-33.997c0-4.219-3.432-7.65-7.65-7.65h-12.74v5.408h12.74 c1.236,0,2.242,1.006,2.242,2.242v33.091C-168.893-35.057-167.08-34.756-165.281-34.625z"/> <path fill="#FFFFFF" d="M-141.77-92.783h-17.115c-1.236,0-2.242-1.006-2.242-2.243v-40.697c-0.973,0.717-1.886,1.459-2.712,2.223 c-0.88-0.208-1.78-0.36-2.696-0.46v38.934c0,4.219,3.432,7.651,7.65,7.651h17.115c1.234,0,2.24,1.005,2.24,2.24v12.673h5.408 v-12.673C-134.121-89.353-137.553-92.783-141.77-92.783z"/> <path fill="#FFFFFF" d="M-69.771-71.164v-4.85h-5.41v4.85c0,1.236-1.004,2.242-2.24,2.242H-99.09v-38.774 c0-4.218-3.431-7.65-7.649-7.65h-14.741v5.408h14.741c1.236,0,2.241,1.005,2.241,2.242v74.031 c1.75,0.423,3.559,0.672,5.408,0.737v-30.585h21.668C-73.203-63.514-69.771-66.945-69.771-71.164z"/> <path fill="#FFFFFF" d="M-136.825-50.096c-6.643,0-12.048-5.406-12.048-12.05c0-6.645,5.405-12.051,12.048-12.051 c6.644,0,12.049,5.406,12.049,12.051C-124.776-55.501-130.182-50.096-136.825-50.096z M-136.825-69.196 c-3.886,0-7.048,3.163-7.048,7.051c0,3.887,3.162,7.05,7.048,7.05c3.887,0,7.049-3.163,7.049-7.05 C-129.776-66.033-132.938-69.196-136.825-69.196z"/> <path fill="#FFFFFF" d="M-194.415-61.564c-6.644,0-12.049-5.406-12.049-12.051c0-6.645,5.405-12.05,12.049-12.05 s12.049,5.406,12.049,12.05C-182.366-66.971-187.771-61.564-194.415-61.564z M-194.415-80.666c-3.887,0-7.049,3.163-7.049,7.05 c0,3.888,3.162,7.051,7.049,7.051s7.049-3.163,7.049-7.051C-187.366-77.503-190.528-80.666-194.415-80.666z"/> <path fill="#FFFFFF" d="M-72.43-73.066c-6.644,0-12.049-5.405-12.049-12.05c0-6.644,5.405-12.049,12.049-12.049 c6.643,0,12.047,5.405,12.047,12.049C-60.383-78.471-65.787-73.066-72.43-73.066z M-72.43-92.165 c-3.887,0-7.049,3.162-7.049,7.049s3.162,7.05,7.049,7.05c3.886,0,7.047-3.163,7.047-7.05S-68.544-92.165-72.43-92.165z"/> <path fill="#FFFFFF" d="M-130.226-100.64c-6.644,0-12.049-5.405-12.049-12.048c0-6.644,5.405-12.05,12.049-12.05 s12.049,5.406,12.049,12.05C-118.177-106.045-123.582-100.64-130.226-100.64z M-130.226-119.738c-3.887,0-7.049,3.163-7.049,7.05 c0,3.886,3.162,7.048,7.049,7.048s7.049-3.162,7.049-7.048C-123.177-116.576-126.339-119.738-130.226-119.738z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#cognitive-services"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                api: h,
                region: "us-west",
                textAnalyticsSize: "free",
                recommendationsSize: "free",
                emotionTier: "basic",
                speechTier: "speechtotext",
                webLanguageModelTier: "standard",
                textAnalyticsOverages: 0,
                recommendationsOverages: 0,
                computerVisionTier: "standard",
                computerVisionTransactions: 0,
                emotionTransactions: 0,
                faceTier: "standard",
                faceTransactions: 0,
                faceStorage: 0,
                languageTier: "free",
                languageTransactions: 0,
                shortSpeechTransactions: 0,
                longSpeechHours: 0,
                textToSpeechTransactions: 0,
                webLanguageModelTransactions: 0,
                speakerRecognitionApi: "speakerverification",
                speakerverificationTransactions: 0,
                speakeridentificationTransactions: 0,
                autoSuggestSize: "s1",
                autoSuggestOverages: 0,
                spellCheckSize: "s1",
                spellCheckOverages: 0,
                searchSize: "s1",
                searchOverages: 0,
                academicKnowledgeTier: "standard",
                academicKnowledgeTransactions: 0,
                translatorSpeechTier: "free",
                translatorSpeechHours: 0,
                translatorSpeechHoursFactor: "1",
                translatorOverages: 0,
                translatorTextTier: "free",
                translatedTextCharacters: 0,
                contentModeratorTransactions: 0,
                customSpeechServiceTier: n,
                customSpeechServiceHours: 0,
                customSpeechServiceShortPhrase: 0,
                customSpeechServiceLongPhrase: 0
            }
        },
        getPrice: function (f) {
            var s = u.getPricingApiStore().data;
            if (!s) return 0;
            switch (f.api) {
                case c:
                    return Math.ceil(f.autoSuggestOverages / s.autosuggest.overageIncrement) * t(f).autoSuggest + s.autosuggest.offers[f.autoSuggestSize].monthlyPrice.global;
                case v:
                    return Math.ceil(f.spellCheckOverages / s.spellCheck.overageIncrement) * t(f).spellCheck + s.spellCheck.offers[f.spellCheckSize].monthlyPrice.global;
                case a:
                    return Math.ceil(f.searchOverages / s.search.overageIncrement) * t(f).search + s.search.offers[f.searchSize].monthlyPrice.global;
                case h:
                    return Math.ceil(f.textAnalyticsOverages / 1e3) * t(f).textAnalytics + s.textAnalytics.offers[f.textAnalyticsSize].monthlyPrice[f.region];
                case l:
                    return Math.ceil(f.recommendationsOverages / 1e3) * t(f).recommendations + s.recommendations.offers[f.recommendationsSize].monthlyPrice[f.region];
                case k:
                    return f.computerVisionTier === n ? 0 : Math.ceil(f.computerVisionTransactions / r(f).computerVision) * t(f).computerVision;
                case y:
                    return Math.ceil(f.emotionTransactions / r(f).emotionApi) * t(f).emotionApi;
                case nt:
                    return f.faceTier === n ? 0 : rt(f).transactions + rt(f).faceStorage;
                case p:
                    return f.languageTier === n ? 0 : Math.ceil(f.languageTransactions / r(f).languageUnderstandingIntelligentServices) * t(f).languageUnderstandingIntelligentServices;
                case e:
                    if (f.speechTier === "speechtotext") return Math.ceil(f.shortSpeechTransactions / 1e3) * t(f).speechtotext;
                    if (f.speechTier === "longformspeech") return getGraduatedPrice(s.speechApi.graduatedOffers["longformspeech-" + f.region].prices, f.longSpeechHours);
                    if (f.speechTier === "texttospeech") return Math.ceil(f.textToSpeechTransactions / 1e3) * t(f).texttospeech;
                case w:
                    return f.webLanguageModelTier === n ? 0 : Math.ceil(f.webLanguageModelTransactions / r(f).webLanguageModel) * t(f).webLanguageModel;
                case it:
                    if (f.speakerRecognitionApi === "speakerverification") return getGraduatedPrice(s.speakerRecognitionApi.offers["speakerverification-" + f.region].prices, f.speakerverificationTransactions, 1e3);
                    if (f.speakerRecognitionApi === "speakeridentification") return getGraduatedPrice(s.speakerRecognitionApi.offers["speakeridentification-" + f.region].prices, f.speakeridentificationTransactions, 1e3);
                case b:
                    return Math.ceil(f.academicKnowledgeTransactions / r(f).academicKnowledge) * t(f).academicKnowledge;
                case d:
                    return f.translatorSpeechTier === n ? 0 : f.translatorSpeechTier === o ? f.translatorSpeechHours * f.translatorSpeechHoursFactor * s.translatorSpeech.offers.s1.price.global : f.translatorOverages * s.translatorSpeech.offers[f.translatorSpeechTier].overagePrice.global + s.translatorSpeech.offers[f.translatorSpeechTier].price.global;
                case g:
                    return f.translatorTextTier === n ? 0 : f.translatorTextTier === o ? f.translatedTextCharacters * s.translatorText.offers.s1.price.global : f.translatedTextCharacters * s.translatorText.offers[f.translatorTextTier].overagePrice.global + s.translatorText.offers[f.translatorTextTier].price.global;
                case i:
                    return getGraduatedPrice(s.contentModerator.offers[i].prices, f.contentModeratorTransactions, 1e3);
                case tt:
                    return f.customSpeechServiceTier === n ? 0 : f.customSpeechServiceHours * ft(f) + getGraduatedPrice(s.customSpeechServiceOffering.graduatedOffers["short-phrase-recognition"].prices, f.customSpeechServiceShortPhrase, s.customSpeechServiceOffering.graduatedOffers["short-phrase-recognition"].transcriptionIncrement) + getGraduatedPrice(s.customSpeechServiceOffering.graduatedOffers["long-phrase-recognition"].prices, f.customSpeechServiceLongPhrase) + s.customSpeechServiceOffering.offers[f.customSpeechServiceTier].monthlyPrice[f.region]
            }
        },
        getDisplayName: function (n) {
            return n.name || ut
        },
        willUpdate: function (n, t) {
            return n.textAnalyticsSize !== t.textAnalyticsSize && (t.textAnalyticsOverages = 0), n.api !== t.api && t.api && (t.region = st(t.api)), n.recommendationsSize !== t.recommendationsSize && (t.recommendationsOverages = 0), n.translatorSpeechHoursFactor !== t.translatorSpeechHoursFactor && (t.translatorSpeechHours = factorInput(n.translatorSpeechHoursFactor, t.translatorSpeechHoursFactor, n.translatorSpeechHours)), t
        },
        getDescription: function (t) {
            var r = u.getPricingApiStore().data,
                f = "";
            if (!r) return "";
            switch (t.api) {
                case c:
                    f = Core.Util.FormatString("Text Analytics API: {0} size, {1} included transactions with {2} overages.", t.autoSuggestSize, r.autosuggest.offers[t.autoSuggestSize].maximumTransactions, t.autoSuggestOverages);
                    break;
                case h:
                    f = Core.Util.FormatString("Text Analytics API: {0} size, {1} included transactions with {2} overages.", t.textAnalyticsSize, r.textAnalytics.offers[t.textAnalyticsSize].maximumTransactions, t.textAnalyticsOverages);
                    break;
                case l:
                    f = Core.Util.FormatString("Recommendations API: {0} size, {1} inluded transactions with {2} overages.", t.recommendationsSize, r.recommendations.offers[t.recommendationsSize].maximumTransactions, t.recommendationsOverages);
                    break;
                case a:
                    f = Core.Util.FormatString("Search API: {0} size, {1} inluded transactions with {2} overages.", t.searchSize, r.search.offers[t.searchSize].maximumTransactions, t.searchOverages);
                    break;
                case v:
                    f = Core.Util.FormatString("Spell Check API: {0} size, {1} inluded transactions with {2} overages.", t.spellCheckSize, r.spellCheck.offers[t.spellCheckSize].maximumTransactions, t.spellCheckOverages);
                    break;
                case e:
                    f = t.speechTier !== "longformspeech" ? Core.Util.FormatString("Bing Speech API: {0} tier with {1} transactions.", t.speechTier, t.speechTier === n ? r.speechApi.offers.free.maximumTransactions : t.speechTier === "speechtotext" ? t.shortSpeechTransactions : t.textToSpeechTransactions) : Core.Util.FormatString("Bing Speech API: {0} tier with {1} hours.", t.speechTier, t.longSpeechHours);
                    break;
                case y:
                    f = t.emotionTier !== "basic" ? Core.Util.FormatString("Emotion API: {0} tier, {1} Maximum transactions per second, {2} Maximum transactions per month, {3} Video uploads per month, {4} Uploads per minute, {5} Status queries per month, {6} Queries per minute, with {7} transactions.", t.emotionTier, r.emotionApi.offers[t.emotionTier].maximumTransactionsPerSecond, r.emotionApi.offers[t.emotionTier].maximumTransactions || "unlimited", r.emotionApi.offers[t.emotionTier].videoUploads, r.emotionApi.offers[t.emotionTier].uploadsPerMinute, r.emotionApi.offers[t.emotionTier].statusQueries, r.emotionApi.offers[t.emotionTier].queriesPerMinute, t.emotionTier === n ? 0 : t.emotionTransactions) : Core.Util.FormatString("Emotion API: {0} tier, {1} transactions (Up to {2} transactions per second, Face Rectangle specified).", t.emotionTier, t.emotionTransactions, r.emotionApi.offers[t.emotionTier].maximumTransactionsPerSecond);
                    break;
                case nt:
                    f = t.faceTier === n ? Core.Util.FormatString("Face API: {0} tier {1} included transactions.", t.faceTier, r.faceApi.offers["face-api-free"].maximumTransactions) : Core.Util.FormatString("Face API: {0} tier {1} transactions (Up to {2} transactions per second) with {3} faces stored per month.", t.faceTier, t.faceTransactions * r.faceApi.graduatedOffers["face-api-standard"].transactionIncrement, r.faceApi.graduatedOffers["face-api-standard"].maximumTransactionsPerSecond, t.faceStorage);
                    break;
                case p:
                    f = t.languageTier === n ? Core.Util.FormatString("Language Understanding Intelligent Service API: {0} tier with {1} included transactions.", t.languageTier, r.languageUnderstandingIntelligentServices.offers[t.languageTier].maximumTransactions) : Core.Util.FormatString("Language Understanding Intelligent Service API: {0} tier, {1} transactions ({2} transactions per second).", t.languageTier, t.languageTransactions, r.languageUnderstandingIntelligentServices.offers[t.languageTier].maximumTransactionsPerSecond);
                    break;
                case w:
                    f = Core.Util.FormatString("Web Language Model API: {0} tier, {1} transactions.", t.webLanguageModelTier, t.webLanguageModelTier === n ? r.webLanguageModel.offers[t.webLanguageModelTier].maximumTransactions : t.webLanguageModelTransactions);
                    break;
                case b:
                    f = Core.Util.FormatString("Academic Knowledge API: {0} tier {1} transactions.", t.academicKnowledgeTier, t.academicKnowledgeTier === n ? r.academicKnowledgeApi.offers.free.maximumTransactions : t.academicKnowledgeTransactions);
                    break;
                case k:
                    f = t.computerVisionTier === n ? Core.Util.FormatString("Computer Vision API: {0} tier {1} included transactions.", t.computerVisionTier, r.computerVision.offers[t.computerVisionTier].maximumTransactions) : Core.Util.FormatString("Computer Vision API: {0} tier, {1} transactions (Up to {1} transactions per second).", t.computerVisionTier, t.computerVisionTransactions, r.computerVision.offers[t.computerVisionTier].maximumTransactionsPerSecond);
                    break;
                case d:
                    f = t.translatorSpeechTier === n || t.translatorSpeechTier === "s1" ? Core.Util.FormatString("Translator Speech API: {0} tier with {1} hours of speech translation.", t.translatorSpeechTier, t.translatorSpeechTier === n ? r.translatorSpeech.offers.free.includedHours : t.translatorSpeechHours) : Core.Util.FormatString("Translator Speech API: {0} tier with {1} included hours of speech translation and {2} overage hours.", t.translatorSpeechTier, r.translatorSpeech.offers[t.translatorSpeechTier].includedHours, t.translatorOverages);
                    break;
                case g:
                    f = t.translatorTextTier === n || t.translatorTextTier === "s1" ? Core.Util.FormatString("Translator Text API: {0} tier with {1} million translated characters.", t.translatorTextTier, t.translatorTextTier === n ? r.translatorText.offers.free.maximumCharacters : t.translatedTextCharacters) : Core.Util.FormatString("Translator Text API: {0} tier with {1} included translated characters and {2} million of overage characters.", t.translatorTextTier, r.translatorText.offers[t.translatorTextTier].maximumCharacters, t.translatedTextCharacters);
                    break;
                case it:
                    f = Core.Util.FormatString("Speaker API: {0} type with {1} thousand transactions.", t.speakerRecognitionApi, t.speakerRecognitionApi === "speakerverification" ? t.speakerverificationTransactions : t.speakeridentificationTransactions);
                    break;
                case i:
                    f = formatString("{0} transactions per month at {1} transactions per second ({2} maximum characters or {3} MB image size per transaction).", (t.contentModeratorTransactions * 1e3).toLocaleString(Acom.currentCulture), r.contentModerator.offers[i].transactionsPerSecond, r.contentModerator.offers[i].maximumCharacters.toLocaleString(Acom.currentCulture), r.contentModerator.offers[i].maximumImageSize);
                case tt:
                    f = t.customSpeechServiceTier === n ? formatString("{0} concurrent transcriptions, {1} Acoustic Model Adaptations (up to 1 hour each), {2} Language Model Adaptations, {3} Transcriptions (Short Phrase or Long Dictation).", r.customSpeechServiceOffering.offers.free.maximumConcurrentTranscriptions, r.customSpeechServiceOffering.offers.free.maximumAcousticModelAdaptations, r.customSpeechServiceOffering.offers.free.maximumLanguageModelAdaptations, r.customSpeechServiceOffering.offers.free.maximumTranscriptions.toLocaleString(Acom.currentCulture)) : formatString("{0} concurrent transcriptions, {1} Accoustic Adaption hours, {2} Short Phrase Recognition transcriptions, {3} Long Phrase Recognition transcriptions.", r.customSpeechServiceOffering.offers[t.customSpeechServiceTier].maximumConcurrentTranscriptions, t.customSpeechServiceHours, t.customSpeechServiceShortPhrase, t.customSpeechServiceLongPhrase)
            }
            return f
        },
        getSku: function (n) {
            var r = u.getPricingApiStore().data,
                t;
            if (!r) return null;
            t = {};
            switch (n.api) {
                case c:
                    t.monthlySku = f(r.autosuggest.offers, n.autoSuggestSize, "monthlySkus", "global");
                    t.overageSku = f(r.autosuggest.offers, n.autoSuggestSize, "overageSkus", "global");
                    break;
                case v:
                    t.monthlySku = f(r.spellCheck.offers, n.spellCheckSize, "monthlySkus", "global");
                    t.overageSku = f(r.spellCheck.offers, n.spellCheckSize, "overageSkus", "global");
                    break;
                case a:
                    t.monthlySku = f(r.search.offers, n.searchSize, "monthlySkus", "global");
                    t.overageSku = f(r.search.offers, n.searchSize, "overageSkus", "global");
                    break;
                case h:
                    t.monthlySku = f(r.textAnalytics.offers, n.textAnalyticsSize, "monthlySkus", n.region);
                    t.overageSku = f(r.textAnalytics.offers, n.textAnalyticsSize, "overageSkus", n.region);
                    break;
                case l:
                    t.monthlySku = f(r.recommendations.offers, n.recommendationsSize, "monthlySkus", n.region);
                    t.overageSku = f(r.recommendations.offers, n.recommendationsSize, "overageSkus", n.region);
                    break;
                case k:
                    t.overageSku = r.computerVision.offers[n.computerVisionTier].skus[n.region];
                    break;
                case y:
                    t.overageSku = r.emotionApi.offers[n.emotionTier].skus[n.region];
                    break;
                case nt:
                    t.transactionSku = r.faceApi.graduatedOffers["face-api-standard"].sku;
                    n.faceTier === "standard" && (t.faceStorageSku = r.faceApi.offers["face-storage"].skus[n.region]);
                    break;
                case p:
                    t.overageSku = r.languageUnderstandingIntelligentServices.offers.basic.skus[n.region];
                    break;
                case e:
                    n.speechTier === "speechtotext" ? t.overageSku = r.speechApi.offers.speechtotext.skus[n.region] : n.speechTier === "longformspeech" ? t.overageSku = r.speechApi.graduatedOffers["longformspeech-" + n.region].sku : n.speechTier === "texttospeech" && (t.overageSku = r.speechApi.offers.texttospeech.skus[n.region]);
                    break;
                case w:
                    t.overageSku = r.webLanguageModel.offers.standard.skus[n.region];
                    break;
                case it:
                    n.speakerRecognitionApi === "speakerverification" ? t.overageSku = r.speakerRecognitionApi.offers["speakerverification-" + n.region].sku : n.speakerRecognitionApi === "speakeridentification" && (t.overageSku = r.speakerRecognitionApi.offers["speakeridentification-" + n.region].sku);
                    break;
                case b:
                    t.overageSku = r.academicKnowledgeApi.offers[n.academicKnowledgeTier].skus[n.region];
                    break;
                case i:
                    t = r.contentModerator.offers[i].sku;
                case tt:
                    t.shortPhraseSku = r.customSpeechServiceOffering.graduatedOffers["short-phrase-recognition"].sku;
                    t.longPhraseSku = r.customSpeechServiceOffering.graduatedOffers["long-phrase-recognition"].sku
            }
            return t
        }
    });
    Acom.Calculator.Actions.modules.register(u)
}();
! function () {
    "use strict";

    function u() {
        var n = Acom.Calculator.Stores.channelCalculator.currentDiscount(),
            t = !0;
        return ["ea"].forEach(function (i) {
            n && n.indexOf(i) === 0 && (t = !1)
        }), t
    }

    function o(t) {
        var u = n.getPricingApiStore().data,
            r;
        if (["usgov-iowa", "usgov-virginia"].indexOf(t.region) >= 0) return "Government Zone";
        r = i(t, u);
        switch (r) {
            case "zone1":
                return Core.Util.FormatString("{0}: {1}, {2}", "Zone 1", "North America", "Europe");
            case "zone2":
                return Core.Util.FormatString("{0}: {1}, {2}, {3}", "Zone 2", "Asia Pacific", "Japan", "Australia");
            case "zone3":
                return Core.Util.FormatString("{0}: {1}", "Zone 3", "Brazil");
            case "zone4":
                return Core.Util.FormatString("{0}", "DE (trustee): Germany");
            default:
                return ""
        }
        return ""
    }

    function i(n, t) {
        for (var i in t.availableRegionsPerZone)
            if (t.availableRegionsPerZone[i].indexOf(n.region) >= 0) return i;
        return ""
    }

    function f(t) {
        var i = n.getSecondaryPricingApiStore().data;
        return i ? getGraduatedPrice(i.offers["block-basic-lrs-" + t.region].prices, t.storageUnits * t.storageFactorUnits) : 0
    }

    function e(t) {
        var i = n.getPricingApiStore().data;
        return i ? getGraduatedPrice(i.offers[t.region].prices, t.bandwidthUnits * t.bandwidthFactorUnits) : 0
    }
    var t = "Azure Container Registry",
        r, n;
    r = React.createClass({
        displayName: "ContainerRegistry",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                i = n.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("span", {
                className: "heading3"
            }, t, React.createElement("sup", {
                className: "preview normal-font"
            }, "Preview"))), React.createElement("div", {
                className: "detail"
            }, React.createElement("p", null, "Azure Container Registry ", React.createElement("sup", null, "Preview"), " itself is a free service. You are only charged for the underlying infrastructure resources like storage used to store your images and data transfers."), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: i.regions,
                defaultValue: n.region
            }))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Storage"), React.createElement("p", null, "Your images will be stored in Locally Redundant (LRS) Blob storage."), React.createElement(FactoredInput, {
                key: "factor-storage-" + n.storageFactorUnits,
                name: "storageUnits",
                defaultValue: n.storageUnits,
                factorsName: "storageFactorUnits",
                factorsDefault: n.storageFactorUnits,
                factorUnit: "gbs",
                min: "0",
                max: "5000",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f(n),
                decimals: "2",
                format: "currency"
            }))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Bandwidth"), displayIf(u(), React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "The first 5GB/Month of data transfer is free in each zone.")), React.createElement("h3", null, o(n)), React.createElement(FactoredInput, {
                key: "factor-storage-" + n.bandwidthFactorUnits,
                name: "bandwidthUnits",
                defaultValue: n.bandwidthUnits,
                factorsName: "bandwidthFactorUnits",
                factorsDefault: n.bandwidthFactorUnits,
                factorUnit: "gbs",
                min: "0",
                max: n.bandwidthFactorUnits === "1" ? 9999 : 500,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: e(n),
                decimals: "2",
                format: "currency"
            }))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "container-registry",
        displayName: t,
        description: "Store and manage container images across all types of Azure deployments",
        pricingApi: "/api/v1/pricing/data-transfers/calculator/",
        component: r,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="container-registry" viewBox="0 0 50 50"> <style>.st0{fill:#59b4d9}.st1{fill:#959595}.st2{fill:#b3b4b5}.st3{fill:#7a7a7a}.st4{opacity:.2;fill:#fff}<\/style> <path class="st0" d="M15 34H9c-4-1-7.085-4.151-7.085-8.33 0-3.459 2.232-6.617 5.263-7.819a10.937 10.937 0 0 1-.055-1.092c0-5.94 4.817-10.753 10.757-10.753a10.74 10.74 0 0 1 8.376 4.019 8.672 8.672 0 0 1 3.924-.927c4.704 0 8.778 4.173 8.944 8.839l-16.063-6.625L15 16.167V34z"/> <path class="st1" d="M45 38.435l-22.132 4.218.102-15.559L45 31.179v7.256zM22.945 13.348L45 21.649v8.311l-22.017-4.691"/> <path class="st2" d="M22.983 25.268l-5.999 2.789v-11.08l5.96-3.63M44 29l-20-4.563V14.5l20 7.375V29zm-11-3.563l2 .548v-6.478l-2-.7v6.63zm-2-7.268l-2-.722v6.926l2 .564v-6.768zm6 8.363l1.972.52.034-6.175-2.006-.67v6.325zm-12-3.187l2 .515v-7.07l-2-.658v7.213zm18-1.101l-2-.7v6.034l2 .548v-5.882zM24 28.75v12.833l20-3.667V31.833L24 28.75zm1 11.333v-9.875l2 .25v9.292l-2 .333zm6-1.01l-2 .365v-8.73L31 31v8.073zm2-.288v-7.577l2 .25v6.958l-2 .369zm6-1.052l-2 .34v-6.365L39 32v5.733zm4.068-.647L41 37.444v-5.236l1.931.241.137 4.637z"/> <path class="st1" d="M19.009 25.077l-1 .585v-7.88l1-.538v7.833zM21 16.098l-.997.688L20 24.44l1-.547v-7.795z"/> <path class="st2" d="M16.984 39.1l-.038-9.094 6.021-2.912L23 42.691"/> <path class="st1" d="M18.887 39.066l-.91-.463v-7.679l.91-.41v8.552zm2.147-9.518l-.993.435-.038 9.69 1.032.535v-10.66z"/> <path class="st3" d="M42.981 22.892l-17.977-6.031.029-.779 17.948 6.175v.635zm-.05 9.556l-17.899-2.246v.777l17.916 2.119-.017-.65zM21 17.129v-.982l-2.904 1.611-.039.825L21 17.129zm-3.019 14.369l3.049-1.104.006-.847-3.061 1.374.006.577z"/> <path class="st4" d="M45 21.695v16.74L23 42.65l16.669-22.973L45 21.695z"/> <\/symbol><\/defs><\/svg><svg><use xlink:href="#container-registry"><\/use><\/svg>'
        },
        secondaryPricingApi: "/api/v1/pricing/storage/calculator/",
        getInitialState: function () {
            var n = u() ? 5 : 0;
            return {
                region: "us-west",
                storageUnits: 0,
                storageFactorUnits: "1",
                bandwidthUnits: 0,
                bandwidthFactorUnits: "1",
                zone: "zone1"
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? f(t) + e(t) : 0
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        willUpdate: function (t, r) {
            var u = n.getPricingApiStore().data;
            return t.bandwidthFactorUnits !== r.bandwidthFactorUnits && (r.bandwidthUnits = r.bandwidthFactorUnits === "1" ? 5 : 5), r.zone = i(t, u), r
        },
        getSku: function () {
            var t = n.getPricingApiStore().data;
            return !t, ""
        },
        getDescription: function (t) {
            var f = {
                    1: "GB",
                    1024: "TB"
                },
                r, u, e;
            if (["usgov-iowa", "usgov-virginia"].indexOf(t.region) >= 0) r = "Government Zone";
            else {
                if (u = n.getPricingApiStore().data, !u) return undefined;
                e = i(t, u);
                switch (e) {
                    case "zone1":
                        r = Core.Util.FormatString("{0} ({1}, {2})", "Zone 1", "North America", "Europe");
                        break;
                    case "zone2":
                        r = Core.Util.FormatString("{0} ({1}, {2}, {3})", "Zone 2", "Asia Pacific", "Japan", "Australia");
                        break;
                    case "zone3":
                        r = Core.Util.FormatString("{0} ({1})", "Zone 3", "Brazil");
                        break;
                    case "zone4":
                        r = Core.Util.FormatString("{0}", "DE (trustee): Germany");
                    default:
                        r = ""
                }
            }
            return Core.Util.FormatString("{0}{1} of storage, {2}{3} of bandwidth in {4}.", t.storageUnits, f[t.storageFactorUnits], t.bandwidthUnits, f[t.bandwidthFactorUnits], r)
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function t(t, i) {
        var f = n.getPricingApiStore().data,
            u = n.getSecondaryPricingApiStore().data,
            r;
        return !f || !u ? undefined : (r = u.offers["linux-" + i + "-standard"], r === Object(r) ? typeof r.prices[t.region] != "undefined" && r : r)
    }

    function u(n, i) {
        return !!t(n, i)
    }

    function e(n, i) {
        var r = t(n, i);
        return r && r.prices[n.region]
    }

    function i(t) {
        var i = n.getPricingApiStore().data,
            r = n.getSecondaryPricingApiStore().data;
        return !i || !r ? 0 : {
            agents: e(t, t.agentsSize) * t.agentsCount * t.agentsHours * (t.agentsHoursFactor || "1"),
            master: t.mastersCount * t.mastersHours * (t.mastersHoursFactor || "1") * r.offers[i.masterNodeOfferSlug].prices[t.region]
        }
    }

    function o(n, t) {
        return !t || t.length == 0 ? "" : t.map(function (t) {
            if (t.slug === n) return t.displayName.toLowerCase()
        })
    }
    var r = "Azure Container Service",
        f, n;
    f = React.createClass({
        displayName: "ContainerService",
        onChange: Acom.Calculator.onChange,
        getMasterData: function () {
            var t = this.props.dataStore.pricingData,
                i = this.props.dataStore.secondaryPricingData,
                n;
            return !t || !i ? React.createElement("p", null) : (n = i.offers[t.masterNodeOfferSlug], React.createElement("p", null, formatString("Linux D2 Standard: {0} cores, {1} GB RAM, {2} GB disk", n.cores, n.ram, n.diskSize)))
        },
        render: function () {
            var n = this.props,
                f = n.dataStore.pricingData,
                o = f.sizes.filter(function (t) {
                    return u(n, t.slug)
                }).map(function (i) {
                    var r = t(n, i.slug),
                        u = e(n, i.slug);
                    return {
                        slug: i.slug,
                        values: {
                            displayStrings: [i.displayName, formatString("{0} cores", r.cores), formatString("{0} GB RAM", r.ram), formatString("{0} GB disk", r.diskSize)],
                            number: {
                                value: u,
                                decimals: 3,
                                format: "currency",
                                rate: "{0}/hr"
                            }
                        }
                    }
                });
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: r,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: f.regions,
                defaultValue: n.region
            }))), React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("h4", null, "Masters"), this.getMasterData(), React.createElement(TextNumber, {
                label: "Virtual Machines",
                name: "mastersCount",
                min: "1",
                max: "999",
                defaultValue: n.mastersCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factors-masterHours-" + n.mastersHoursFactor,
                name: "mastersHours",
                defaultValue: n.mastersHours,
                factorsName: "mastersHoursFactor",
                factorsDefault: n.mastersHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(n).master,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h4", null, "Agents"), React.createElement("div", {
                className: "wa-dropdownList no-divider"
            }, React.createElement(DetailedDropdown, {
                key: "agentRegion-" + n.region,
                label: "Instance size",
                name: "agentsSize",
                options: o,
                delimiters: ["colon", "comma"],
                defaultValue: n.agentsSize,
                onChange: this.onChange
            }))), React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement(TextNumber, {
                label: "Virtual Machines",
                name: "agentsCount",
                min: "1",
                max: "999",
                defaultValue: n.agentsCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-agentHours-" + n.agentsHoursFactor,
                name: "agentsHours",
                defaultValue: n.agentsHours,
                factorsName: "agentsHoursFactor",
                factorsDefault: n.agentsHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(n).agents,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "container-service",
        displayName: r,
        description: "Use Docker-based tools to deploy and manage containers",
        pricingApi: "/api/v1/pricing/container-service/calculator/",
        secondaryPricingApi: "/api/v1/pricing/virtual-machines/calculator/",
        component: f,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="container-service" viewBox="-454 256 50 50"> <polygon fill="#804998" points="-431.1,271.9 -438.8,274.9 -438.8,262.5 -431.1,265.2"/> <path fill="#804998" d="M-445.7,264.6v8.1l5.7,2.2v-12.3L-445.7,264.6z M-445.1,272.1l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-445.1,272.1z M-443.6,272.5l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-443.6,272.5z M-441.8,273.1l-0.5-0.2 v-8.5l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-441.8,273.1z"/> <polygon fill="#804998" points="-413.2,271.9 -420.9,274.9 -420.9,262.5 -413.2,265.2"/> <path fill="#804998" d="M-427.8,264.6v8.1l5.7,2.2v-12.3L-427.8,264.6z M-427.2,272.1l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-427.2,272.1z M-425.7,272.5l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-425.7,272.5z M-423.9,273.1l-0.5-0.2 v-8.5l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-423.9,273.1z"/> <polygon fill="#804998" points="-431.1,296.5 -438.8,299.5 -438.8,287.1 -431.1,289.8"/> <path fill="#804998" d="M-445.7,289.2v8.1l5.7,2.2v-12.3L-445.7,289.2z M-445.1,296.7l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-445.1,296.7z M-443.6,297.1l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-443.6,297.1z M-441.8,297.7l-0.5-0.2 V289l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-441.8,297.7z"/> <polygon fill="#804998" points="-413.2,296.5 -420.9,299.5 -420.9,287.1 -413.2,289.8"/> <path fill="#804998" d="M-427.8,289.2v8.1l5.7,2.2v-12.3L-427.8,289.2z M-427.2,296.7l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-427.2,296.7z M-425.7,297.1l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-425.7,297.1z M-423.9,297.7l-0.5-0.2 V289l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-423.9,297.7z"/> <polygon fill="#804998" points="-421.6,284.2 -429.2,287.1 -429.2,274.8 -421.6,277.5"/> <path fill="#804998" d="M-436.2,276.8v8.1l5.7,2.2v-12.3L-436.2,276.8z M-435.6,284.3l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-435.6,284.3z M-434.1,284.8l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-434.1,284.8z M-432.3,285.4l-0.5-0.2 v-8.5l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-432.3,285.4z"/> <polygon fill="#804998" points="-439.4,284.2 -447,287.1 -447,274.8 -439.4,277.5"/> <path fill="#804998" d="M-454,276.8v8.1l5.7,2.2v-12.3L-454,276.8z M-453.4,284.3l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3l-0.3-0.1 L-453.4,284.3z M-451.9,284.8l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-451.9,284.8z M-450.1,285.4l-0.5-0.2v-8.5 l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-450.1,285.4z"/> <polygon fill="#804998" points="-404,284.2 -411.6,287.1 -411.6,274.8 -404,277.5"/> <polygon fill="#FFF" opacity="0.2" points="-431.1,271.9 -438.8,274.9 -438.8,262.5 -431.1,265.2"/> <polygon fill="#FFF" opacity="0.2" points="-413.2,271.9 -420.9,274.9 -420.9,262.5 -413.2,265.2"/> <polygon fill="#FFF" opacity="0.2" points="-431.1,296.5 -438.8,299.5 -438.8,287.1 -431.1,289.8"/> <polygon fill="#FFF" opacity="0.2" points="-413.2,296.5 -420.9,299.5 -420.9,287.1 -413.2,289.8"/> <polygon fill="#FFF" opacity="0.2" points="-421.6,284.2 -429.2,287.1 -429.2,274.8 -421.6,277.5"/> <polygon fill="#FFF" opacity="0.2" points="-439.4,284.2 -447,287.1 -447,274.8 -439.4,277.5"/> <polygon fill="#FFF" opacity="0.2" points="-404,284.2 -411.6,287.1 -411.6,274.8 -404,277.5"/> <path fill="#804998" d="M-418.6,276.8v8.1l5.7,2.2v-12.3L-418.6,276.8z M-418,284.3l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-418,284.3z M-416.5,284.8l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-416.5,284.8z M-414.7,285.4l-0.5-0.2 v-8.5l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-414.7,285.4z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#container-service"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-west",
                mastersCount: 1,
                mastersHours: 744,
                mastersHoursFactor: "1",
                agentsSize: "a0",
                agentsCount: 1,
                agentsHours: 744,
                agentsHoursFactor: "1"
            }
        },
        getPrice: function (t) {
            return n.getPricingApiStore().data ? i(t).agents + i(t).master : 0
        },
        getDisplayName: function (n) {
            return n.name || r
        },
        willUpdate: function (t, i) {
            var e = n.getPricingApiStore().data,
                r, f;
            if (!u(i, i.size))
                for (f = 0; r = e.sizes[f]; f++)
                    if (u(i, r.slug)) {
                        i.size = r.slug;
                        break
                    }
            return t.mastersHoursFactor !== i.mastersHoursFactor && (i.mastersHours = factorInput(t.mastersHoursFactor, i.mastersHoursFactor, t.mastersHours)), t.agentsHoursFactor !== i.agentsHoursFactor && (i.agentsHours = factorInput(t.agentsHoursFactor, i.agentsHoursFactor, t.agentsHours)), i
        },
        getSku: function (i) {
            if (!n.getPricingApiStore().data) return "";
            var r = t(i, i.size),
                u = i.region + "-" + i.type;
            return r && r.skus[u]
        },
        getDescription: function (n) {
            return Core.Util.FormatString("Masters: {0} D2 Linux VM(s) x {1} {2}; Agents: {3} {4} Linux VM(s) x {5} {6}", n.mastersCount, n.mastersHours, o(n.mastersHoursFactor, timeFactors), n.agentsCount, n.agentsSize.toUpperCase(), n.agentsHours, o(n.agentsHoursFactor, timeFactors))
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function i(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            customerProfiles: i.offers[t.tier].customerProfiles,
            interactions: i.offers[t.tier].interactions
        } : ""
    }
    var t = "Dynamics 365 for Customer Insights",
        r, n;
    r = React.createClass({
        displayName: "CustomerInsights",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var r = this.props,
                u = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: r.dataStore.module.icon
            }), " ", React.createElement("span", {
                className: "heading3"
            }, t, React.createElement("sup", {
                className: "preview normal-font"
            }, "Preview"))), React.createElement("div", {
                className: "detail"
            }, React.createElement("p", null, formatReact("Includes {0} customer profiles and {1} interactions per month.", i(r).customerProfiles.toString(), i(r).interactions.toString()))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "customer-insights",
        displayName: t,
        description: "Transform your customer data into actionable insights",
        pricingApi: "/api/v1/pricing/customer-insights/calculator/",
        component: r,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="customer-insights" viewBox="0 0 58 60"> <polygon points="11.68 60 23.367 26.451 11.68 18.791 11.68 60" fill="#17234e"/> <polygon points="48.645 39.25 48.645 20.206 11.68 60 48.645 39.25" fill="#17234e"/> <polygon points="11.68 0 11.68 16.078 35.803 27.909 47.016 18.786 11.68 0" fill="#17234e"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#customer-insights"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                tier: "basic"
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier].prices[t.region] : 0
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier].skus[t.region] : ""
        },
        getDescription: function (n) {
            var t = i(n);
            return formatString("{0} customer profiles with {1} interactions per month.", t.customerProfiles, t.interactions)
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function r(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.offers[t.tier].prices[t.region] : undefined
    }
    var t = "Data Catalog",
        i, n;
    i = React.createClass({
        displayName: "DataCatalog",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                i = n.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: i.regions,
                defaultValue: n.region
            }), React.createElement(CalculatorDropdown, {
                label: "Pricing tier",
                name: "tier",
                options: i.tiers,
                defaultValue: n.tier
            }))), displayIf(n.tier !== "free", React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Users",
                name: "userUnits",
                min: "0",
                max: "9999",
                defaultValue: n.userUnits,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(n),
                decimals: "2",
                format: "currency"
            }))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            })))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "data-catalog",
        displayName: t,
        description: "Get more value from your enterprise data assets",
        pricingApi: "/api/v1/pricing/data-catalog/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="data-catalog" viewBox="0 0 50 50"> <path fill="#0072C6" d="M36.7,35.7h1.6V0H9.1H7C6,0.1,3.9,2.6,3.9,2.9c0,0.1,0,34.5,0,34.5c0,1,0.8,1.9,1.9,1.9h28.5v-0.6L36.7,35.7 z"/> <path fill="#E5E5E5" d="M8.4,1.6c-0.9,0-1.2,0.1-2,0.8C4.7,3.9,6.8,3.9,7.6,3.9h26.7v34.8l2.4-3.1V1.6H8.4z"/> <polygon opacity="0.5" fill="#A0A1A2" enable-background="new    " points="34.3,38.7 36.7,35.7 36.7,1.6 34.3,3.9 "/> <path fill="#A0A1A2" d="M8.4,21.2c0,0.8-0.6,1.4-1.4,1.4H2.4C1.6,22.6,1,22,1,21.2l0,0c0-0.8,0.6-1.4,1.4-1.4H7 C7.8,19.7,8.4,20.4,8.4,21.2L8.4,21.2z"/> <path fill="#A0A1A2" d="M8.4,10.9c0,0.8-0.6,1.4-1.4,1.4H2.4c-0.8,0-1.4-0.6-1.4-1.4l0,0c0-0.8,0.6-1.4,1.4-1.4H7 C7.8,9.5,8.4,10.2,8.4,10.9L8.4,10.9z"/> <path fill="#A0A1A2" d="M8.4,31.4c0,0.8-0.6,1.4-1.4,1.4H2.4c-0.8,0-1.4-0.6-1.4-1.4l0,0C1,30.6,1.6,30,2.4,30H7 C7.8,30,8.4,30.6,8.4,31.4L8.4,31.4z"/> <path fill="#3999C6" d="M23.6,22.2v23.5c0,2.4,5.5,4.4,12.2,4.4v-28H23.6z"/> <path fill="#59B4D9" d="M35.6,50.2h0.2c6.7,0,12.2-2,12.2-4.4V22.2H35.6V50.2z"/> <path fill="#FFFFFF" d="M48,22.2c0,2.4-5.5,4.4-12.2,4.4s-12.2-2-12.2-4.4c0-2.4,5.5-4.4,12.2-4.4S48,19.8,48,22.2"/> <path fill="#7FBA00" d="M45.5,21.9c0,1.6-4.4,2.9-9.7,2.9s-9.7-1.3-9.7-2.9c0-1.6,4.4-2.9,9.7-2.9S45.5,20.3,45.5,21.9"/> <path fill="#B8D432" d="M43.5,23.7c1.3-0.5,2-1.1,2-1.8c0-1.6-4.4-2.9-9.7-2.9c-5.4,0-9.7,1.3-9.7,2.9c0,0.7,0.8,1.3,2,1.8 c1.8-0.7,4.6-1.1,7.7-1.1C38.9,22.6,41.7,23,43.5,23.7"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#data-catalog"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                tier: "free",
                userUnits: 0
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? r(t) * t.userUnits : undefined
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getDescription: function (n) {
            return n.tier === "free" ? Core.Util.FormatString("{0} tier", n.tier) : Core.Util.FormatString("{0} x 100 User Units, {1} tier", n.userUnits, n.tier)
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier].skus ? i.offers[t.tier].skus[t.region] : "" : ""
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function e(n) {
        return parseInt(n.cloudLowFrequency) + parseInt(n.cloudHighFrequency) + parseInt(n.onPremisesLowFrequency) + parseInt(n.onPremisesHighFrequency) > 100 ? !0 : !1
    }

    function t(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            cloudReruns: i.offers["rerunning-cloud"].prices[t.region],
            cloudDataMovement: i.offers["datamovement-cloud"].prices[t.region],
            onPremisesReruns: i.offers["rerunning-on-premise"].prices[t.region],
            onPremisesDataMovement: i.offers["datamovement-on-premise"].prices[t.region]
        } : undefined
    }

    function i(i) {
        var r = n.getPricingApiStore().data;
        return r ? {
            lowFrequency: getGraduatedPrice(r.graduatedOffers["low-frequency-cloud"][i.region].prices, i.cloudLowFrequency),
            highFrequency: r.offers["high-frequency-cloud"].prices[i.region] * i.cloudHighFrequency,
            reRuns: t(i).cloudReruns * i.cloudReruns,
            dataMovement: t(i).cloudDataMovement * i.cloudDataMovement
        } : undefined
    }

    function r(i) {
        var r = n.getPricingApiStore().data;
        return r ? {
            lowFrequency: getGraduatedPrice(r.graduatedOffers["low-frequency-on-premise"][i.region].prices, i.onPremisesLowFrequency),
            highFrequency: r.offers["high-frequency-on-premise"].prices[i.region] * i.onPremisesHighFrequency,
            reRuns: t(i).onPremisesReruns * i.onPremisesReruns,
            dataMovement: t(i).onPremisesDataMovement * i.onPremisesDataMovement
        } : undefined
    }
    var u = "Data Factory",
        f, n;
    f = React.createClass({
        displayName: "DataFactory",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var f = this.props,
                o = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: f.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: u,
                defaultValue: f.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: o.regions,
                defaultValue: f.region
            })), React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "This represents a single Data Factory pipeline instance. First 5 low frequency activities in a month are free. "), displayIf(e(f), React.createElement("div", {
                className: "wa-notification calculator-notification"
            }, React.createElement("span", {
                className: "wa-iconBoxed"
            }, React.createElement("span", {
                className: "icon",
                dangerouslySetInnerHTML: {
                    __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="health-information" viewBox="0 0 21 21"> <title lang="en">Health Information<\/title> <path d="M11.042,20.833a10,10,0,1,1,10-10A10.011,10.011,0,0,1,11.042,20.833Z" transform="translate(-0.542 -0.333)" style="fill:#0073b0"/> <path d="M11.042,1.333a9.5,9.5,0,1,1-9.5,9.5,9.511,9.511,0,0,1,9.5-9.5m0-1a10.5,10.5,0,1,0,10.5,10.5,10.5,10.5,0,0,0-10.5-10.5Z" transform="translate(-0.542 -0.333)" style="fill:#0073b0"/> <circle cx="10.5" cy="6.131" r="1.631" style="fill:#fff"/> <polygon points="10.256 16.667 10.744 16.667 11.792 16.667 11.792 9.667 10.744 9.667 10.256 9.667 9.053 9.667 9.038 16.667 10.256 16.667" style="fill:#fff"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#health-information"><\/use><\/svg>'
                }
            })), React.createElement("p", null, "Usage beyond 100 activities/month will receive 20% off their individual cost. Discount will be applied to your bill.")))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Cloud"), React.createElement(TextNumber, {
                label: "Low frequency activities",
                name: "cloudLowFrequency",
                min: "0",
                max: "99999",
                defaultValue: f.cloudLowFrequency,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(f).lowFrequency,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku && f.sku["lowfrequency-cloud"]))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "High frequency activites",
                name: "cloudHighFrequency",
                min: "0",
                max: "99999",
                defaultValue: f.cloudHighFrequency,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(f).highFrequency,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku && f.sku["highfrequency-cloud"]))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "Re-run activites",
                name: "cloudReruns",
                min: "0",
                max: "99999",
                defaultValue: f.cloudReruns,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(f).cloudReruns,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per 1,000 re-runs")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(f).reRuns,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku && f.sku["rerunning-cloud"]))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "Data movement hours",
                name: "cloudDataMovement",
                min: "0",
                max: "99999",
                defaultValue: f.cloudDataMovement,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(f).cloudDataMovement,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per hour")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(f).dataMovement,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku && f.sku["datamovement-cloud"]))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "On-Premises"), React.createElement(TextNumber, {
                label: "Low frequency activities",
                name: "onPremisesLowFrequency",
                min: "0",
                max: "99999",
                defaultValue: f.onPremisesLowFrequency,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(f).lowFrequency,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku && f.sku["lowfrequency-premises"]))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "High frequency activites",
                name: "onPremisesHighFrequency",
                min: "0",
                max: "99999",
                defaultValue: f.onPremisesHighFrequency,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(f).highFrequency,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku && f.sku["highfrequency-premises"]))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "Re-run activites",
                name: "onPremisesReruns",
                min: "0",
                max: "99999",
                defaultValue: f.onPremisesReruns,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(f).onPremisesReruns,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per 1,000 re-runs")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(f).reRuns,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku && f.sku["rerunning-premises"]))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "Data movement hours",
                name: "onPremisesDataMovement",
                min: "0",
                max: "99999",
                defaultValue: f.onPremisesDataMovement,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(f).onPremisesDataMovement,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per hour")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(f).dataMovement,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku && f.sku["datamovement-premises"]))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "data-factory",
        displayName: u,
        description: "Orchestrate and manage data transformation and movement",
        pricingApi: "/api/v1/pricing/data-factory/calculator/",
        component: f,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="data-factory" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M49.9,29.5L49.9,29.5V17.4L36.2,29.3h-0.3V17.4L22.2,29.3l0,0V4.4c0-2.1-4.7-4.2-10.9-4.2 C5.1,0.2,0,2.2,0,4.4V50h50L49.9,29.5z M11.3,6.4c-4.5,0-8.1-1.1-8.1-2.3s3.6-2.3,8.1-2.3s8.1,1,8.1,2.3C19.3,5.3,15.7,6.4,11.3,6.4 z M34.9,41.9h-5.5v-5.5h5.5V41.9z M25.2,41.9h-5.5v-5.5h5.5V41.9z M39.2,41.9v-5.5h5.5v5.5H39.2z"/> <rect x="0" y="4.1" fill="#3999C6" width="11.1" height="45.9"/> <path fill="#FFFFFF" d="M22.1,4.1c0,2.2-5,4-11.1,4S0,6.3,0,4.1c0-2.2,5-4,11.1-4S22.1,1.8,22.1,4.1"/> <path fill="#7FBA00" d="M19.9,3.8c0,1.5-3.9,2.6-8.8,2.6S2.3,5.3,2.3,3.8c0-1.5,3.9-2.6,8.8-2.6S19.9,2.4,19.9,3.8"/> <path fill="#B8D432" d="M18,5.4c1.2-0.4,1.8-1,1.8-1.6c0-1.5-3.9-2.6-8.8-2.6c-4.9,0-8.8,1.2-8.8,2.6C2.3,4.4,3,5,4.1,5.4 c1.6-0.6,4.1-1,7-1C13.9,4.4,16.4,4.8,18,5.4"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#data-factory"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-west",
                cloudLowFrequency: 0,
                cloudHighFrequency: 0,
                cloudReruns: 0,
                cloudDataMovement: 0,
                onPremisesLowFrequency: 0,
                onPremisesHighFrequency: 0,
                onPremisesReruns: 0,
                onPremisesDataMovement: 0
            }
        },
        getPrice: function (t) {
            var e = n.getPricingApiStore().data,
                f = 0,
                u;
            if (!e) return undefined;
            for (u in i(t)) f += i(t)[u];
            for (u in r(t)) f += r(t)[u];
            return f
        },
        getDisplayName: function (n) {
            return n.name || u
        },
        getDescription: function (n) {
            return Core.Util.FormatString("Cloud: {0} low frequency, {1} high frequency, {2} re runs, {3} data movement. On Premises: {4} low frequency, {5} high frequency, {6} re runs, {7} data movement.", n.cloudLowFrequency, n.cloudHighFrequency, n.cloudReruns, n.cloudDataMovement, n.onPremisesLowFrequency, n.onPremisesHighFrequency, n.onPremisesReruns, n.onPremisesDataMovement)
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data,
                r = {};
            return i ? (r["datamovement-cloud"] = i.offers["datamovement-cloud"].skus[t.region], r["datamovement-premises"] = i.offers["datamovement-on-premise"].skus[t.region], r.inactivepipelines = i.offers.inactive.skus[t.region], r["rerunning-cloud"] = i.offers["rerunning-cloud"].skus[t.region], r["rerunning-premises"] = i.offers["rerunning-on-premise"].skus[t.region], r["lowfrequency-cloud"] = i.graduatedOffers["low-frequency-cloud"][t.region].sku, r["lowfrequency-premises"] = i.graduatedOffers["low-frequency-on-premise"][t.region].sku, r["highfrequency-cloud"] = i.offers["high-frequency-cloud"].skus[t.region], r["highfrequency-premises"] = i.offers["high-frequency-on-premise"].skus[t.region], r) : undefined
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function f(t) {
        var i = n.getPricingApiStore().data;
        return i ? t.type === "paygo" ? !!i.offers["pay-go-unit"].prices[t.region] : t.type === "commitmentmonthly" ? !!i.offers["commitment-" + t.tier + "-units"].prices[t.region] : void 0 : !1
    }

    function r(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            price: i.offers["pay-go-unit"].prices[t.region],
            cost: i.offers["pay-go-unit"].prices[t.region] * t.analyticUnits * t.hours
        } : undefined
    }

    function t(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            overage: i.offers["commitment-overage"].prices[t.region],
            prepaid: i.offers["commitment-" + t.tier + "-units"].prices[t.region]
        } : undefined
    }
    var i = "Data Lake Analytics",
        u, n;
    u = React.createClass({
        displayName: "DataLakeAnalytics",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var u = this.props,
                f = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: u.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: i,
                defaultValue: u.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                key: "region-" + u.region + u.type,
                label: "Region",
                name: "region",
                options: f.regions,
                defaultValue: u.region
            }), React.createElement(CalculatorDropdown, {
                key: "type-" + u.type + u.region,
                label: "Pricing type",
                name: "type",
                options: f.types,
                defaultValue: u.type
            })), displayIf(u.type === "commitmentmonthly", React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Pre-paid hours",
                name: "tier",
                options: f.monthlyCommitmentTiers,
                defaultValue: u.tier
            })))), displayIf(u.type === "paygo", React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("h4", null, "Analytic units"), React.createElement(TextNumber, {
                label: "Analytic units",
                name: "analyticUnits",
                min: "0",
                max: "9999",
                defaultValue: u.analyticUnits,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(TextNumber, {
                label: "Hours",
                name: "hours",
                min: "0",
                max: "24",
                defaultValue: u.hours,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per hour",
                value: React.createElement(Acom.Atoms.Number, {
                    value: r(u).price,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(u).cost,
                decimals: "2",
                format: "currency"
            }))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            })))))), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Overage hours",
                name: "overageHours",
                min: "0",
                max: "99999",
                defaultValue: u.overageHours,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per hour",
                value: React.createElement(Acom.Atoms.Number, {
                    value: t(u).overage,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "math"
            }, "+"), React.createElement(StaticNumber, {
                value: React.createElement(Acom.Atoms.Number, {
                    value: t(u).prepaid,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            })))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "data-lake-analytics",
        displayName: i,
        description: "Distributed analytics service that makes big data easy",
        pricingApi: "/api/v1/pricing/data-lake-analytics/calculator/",
        component: u,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="data-lake-analytics" viewBox="0 0 50 50"> <path fill="#3E3E3E" d="M6.1,6.8v36.3c0,3.8,8.4,6.8,18.9,6.8V6.8H6.1z"/> <path fill="#A0A1A2" d="M24.7,50H25c10.4,0,18.9-3.1,18.9-6.8V6.8H24.7V50z"/> <path fill="#FFFFFF" d="M43.9,6.8c0,3.8-8.4,6.8-18.9,6.8S6.1,10.6,6.1,6.8C6.1,3.1,14.6,0,25,0S43.9,3.1,43.9,6.8"/> <path fill="#7FBA00" d="M40,6.4c0,2.5-6.7,4.5-15,4.5s-15-2-15-4.5c0-2.5,6.7-4.5,15-4.5S40,3.9,40,6.4"/> <path fill="#B8D432" d="M36.9,9.2c2-0.8,3.1-1.7,3.1-2.8c0-2.5-6.7-4.5-15-4.5c-8.3,0-15,2-15,4.5c0,1,1.2,2,3.1,2.8 c2.7-1.1,7-1.8,11.9-1.8C29.8,7.4,34.1,8.1,36.9,9.2"/> <path fill="#3999C6" d="M24.7,50V32c-2.8,0-5.2-1.5-6.6-3.7c-1.4,2.2-3.7,3.7-6.5,3.7c-2.2,0-4.1-0.9-5.5-2.4v13.6 C6.1,46.9,14.4,49.9,24.7,50z"/> <path fill="#3999C6" d="M25,50L25,50L25,50C25,50,25,50,25,50z"/> <path fill="#59B4D9" d="M24.7,50H25C24.9,50,24.8,50,24.7,50L24.7,50z"/> <path fill="#59B4D9" d="M38.1,32c-2.8,0-5.3-1.5-6.7-3.7c-1.3,2.2-3.7,3.6-6.5,3.7v18h0c10.4,0,18.9-3.1,18.9-6.8V29.5 C42.4,31,40.4,32,38.1,32z"/> <path fill="#59B4D9" d="M24.8,32C24.8,32,24.8,32,24.8,32l-0.1,18c0.1,0,0.1,0,0.2,0h0V32C24.9,32,24.9,32,24.8,32z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#data-lake-analytics"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east-2",
                type: "paygo",
                analyticUnits: 0,
                hours: 0,
                tier: "100",
                overageHours: 0
            }
        },
        getPrice: function (i) {
            var u = n.getPricingApiStore().data;
            return u ? i.type === "paygo" ? r(i).cost : i.type === "commitmentmonthly" ? t(i).overage * i.overageHours + t(i).prepaid : void 0 : undefined
        },
        getDisplayName: function (n) {
            return n.name || i
        },
        willUpdate: function (n, t) {
            return f(t) || (t.region = "us-east-2", t.type = "paygo"), t
        },
        getDescription: function (n) {
            return n.type === "paygo" ? formatString("{0} pay type, {1} analytic unit(s) x {2} hours(s)", n.type, n.analyticUnits, n.hours) : n.type === "commitmentmonthly" ? formatString("{0} pay type, {1} included hours with {2} overage hour{s}", n.type, n.tier, n.overageHours) : void 0
        },
        getSku: function () {
            var t = n.getPricingApiStore().data;
            return t ? {} : undefined
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function f(t) {
        var i = n.getPricingApiStore().data;
        return i ? getGraduatedPrice(i.graduatedOffers["pay-as-you-go"][t.region].prices, t.stored * t.storedUnits) : 0
    }

    function t(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            read: i.offers["read-transactions"].prices[t.region],
            write: i.offers["write-transactions"].prices[t.region]
        } : 0
    }

    function i(i) {
        var r = n.getPricingApiStore().data;
        return r ? {
            read: t(i).read * i.readTransactions10k,
            write: t(i).write * i.writeTransactions10k
        } : 0
    }
    var r = "Data Lake Store",
        u, n;
    u = React.createClass({
        displayName: "DataLakeStore",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var u = this.props,
                e = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: u.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: r,
                defaultValue: u.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: e.regions,
                defaultValue: u.region
            }))), React.createElement("div", {
                className: "cost no-divder"
            }, React.createElement("h3", null, "Storage"), React.createElement(FactoredInput, {
                key: "factor-stored-" + u.storedUnits,
                name: "stored",
                defaultValue: u.stored,
                factorsName: "storedUnits",
                factorsDefault: u.storedUnits,
                factorUnit: "gbs",
                min: "0",
                max: "5000",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f(u),
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, u.sku.stored))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Read Transactions"), React.createElement(TextNumber, {
                label: "Transaction units (10,000 transactions)",
                name: "readTransactions10k",
                min: "0",
                max: "999999999",
                defaultValue: u.readTransactions10k,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per 10,000 transactions",
                value: React.createElement(Acom.Atoms.Number, {
                    value: t(u).read,
                    decimals: "3",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(u).read,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, u.sku.readTransactions10k))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Write Transactions"), React.createElement(TextNumber, {
                label: "Transaction units (10,000 transactions)",
                name: "writeTransactions10k",
                min: "0",
                max: "999999999",
                defaultValue: u.writeTransactions10k,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per 10,000 transactions",
                value: React.createElement(Acom.Atoms.Number, {
                    value: t(u).write,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(u).write,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, u.sku.writeTransactions10k))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "data-lake-store",
        displayName: r,
        description: "Hyperscale repository for big data analytics workloads",
        pricingApi: "/api/v1/pricing/data-lake-store/calculator/",
        component: u,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="data-lake-store" viewBox="0 0 50 50"> <path fill="#3E3E3E" d="M6.1,6.8v36.3c0,3.8,8.4,6.8,18.9,6.8V6.8H6.1z"/> <path fill="#A0A1A2" d="M24.7,50H25c10.4,0,18.9-3.1,18.9-6.8V6.8H24.7V50z"/> <path fill="#FFFFFF" d="M43.9,6.8c0,3.8-8.4,6.8-18.9,6.8S6.1,10.6,6.1,6.8C6.1,3.1,14.6,0,25,0S43.9,3.1,43.9,6.8"/> <path fill="#7FBA00" d="M40,6.4c0,2.5-6.7,4.5-15,4.5s-15-2-15-4.5c0-2.5,6.7-4.5,15-4.5S40,3.9,40,6.4"/> <path fill="#B8D432" d="M36.9,9.2c2-0.8,3.1-1.7,3.1-2.8c0-2.5-6.7-4.5-15-4.5c-8.3,0-15,2-15,4.5c0,1,1.2,2,3.1,2.8 c2.7-1.1,7-1.8,11.9-1.8C29.8,7.4,34.1,8.1,36.9,9.2"/> <path fill="#3999C6" d="M24.7,50V32c-2.8,0-5.2-1.5-6.6-3.7c-1.4,2.2-3.7,3.7-6.5,3.7c-2.2,0-4.1-0.9-5.5-2.4v13.6 C6.1,46.9,14.4,49.9,24.7,50z"/> <path fill="#3999C6" d="M25,50L25,50L25,50C25,50,25,50,25,50z"/> <path fill="#59B4D9" d="M24.7,50H25C24.9,50,24.8,50,24.7,50L24.7,50z"/> <path fill="#59B4D9" d="M38.1,32c-2.8,0-5.3-1.5-6.7-3.7c-1.3,2.2-3.7,3.6-6.5,3.7v18h0c10.4,0,18.9-3.1,18.9-6.8V29.5 C42.4,31,40.4,32,38.1,32z"/> <path fill="#59B4D9" d="M24.8,32C24.8,32,24.8,32,24.8,32l-0.1,18c0.1,0,0.1,0,0.2,0h0V32C24.9,32,24.9,32,24.8,32z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#data-lake-store"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east-2",
                stored: 0,
                storedUnits: "1",
                readTransactions10k: 0,
                writeTransactions10k: 0
            }
        },
        getPrice: function (t) {
            var r = n.getPricingApiStore().data;
            return r ? f(t) + i(t).read + i(t).write : 0
        },
        getDisplayName: function (n) {
            return n.name || r
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0}{1} stored, {2} read transaction units (10,000 transactions per unit) and {3} write transaction units (10,000 transactions per unit)", n.stored, {
                1: "GB",
                1024: "TB"
            }[n.storedUnits], n.readTransactions10k, n.writeTransactions10k)
        },
        getSku: function (t) {
            var r = n.getPricingApiStore().data,
                i = {};
            return r ? (i.stored = r.graduatedOffers["pay-as-you-go"][t.region].sku, i.readTransactions10k = r.offers["read-transactions"].skus[t.region], i.writeTransactions10k = r.offers["write-transactions"].skus[t.region], i) : i
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function r(t) {
        var i = n.getPricingApiStore().data;
        return i ? getGraduatedPrice(i.graduatedOffers.zone.global.prices, t.zones) : undefined
    }

    function u(t) {
        var i = n.getPricingApiStore().data;
        return i ? getGraduatedPrice(i.graduatedOffers.queries.global.prices, t.queries) : undefined
    }
    var t = "Azure DNS",
        i, n;
    i = React.createClass({
        displayName: "DNS",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                i = n.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: i.regions,
                defaultValue: n.region
            }))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "wa-textNumber"
            }, React.createElement(TextNumber, {
                label: "Hosted DNS zones",
                name: "zones",
                min: "0",
                max: "99999",
                defaultValue: n.zones,
                onChange: this.onChange
            }), displayIf(n.displaySku && n.sku.zones, React.createElement("div", {
                className: "sku-under-total center"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.zones)))), React.createElement("div", {
                className: "math"
            }, "+"), React.createElement("div", {
                className: "wa-textNumber"
            }, React.createElement(TextNumber, {
                label: "DNS Queries (millions)",
                name: "queries",
                min: "0",
                max: "99999",
                defaultValue: n.queries,
                onChange: this.onChange
            }), displayIf(n.displaySku && n.sku.queries, React.createElement("div", {
                className: "sku-under-total center"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.queries)))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "dns",
        displayName: t,
        description: "Host your DNS domain in Azure",
        pricingApi: "/api/v1/pricing/dns/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="dns" viewBox="-1 -1 34 34"> <path fill="#0072c6" d="M19,17.4c-0.8,0-1.5,0.5-1.9,1.2H5.3v0c-2,0-3.6-1.6-3.6-3.6s1.6-3.6,3.6-3.6v0h0h0H7 c0.1-0.4,0.2-0.8,0.4-1.2C7.4,10,7.5,9.8,7.5,9.7c0.8-1.5,2.4-2.4,4.2-2.4c1.6,0,3,0.8,3.9,2c0.5-0.2,1-0.4,1.6-0.5 c-1.1-1.8-3.2-3.1-5.5-3.1c-2.7,0-5,1.7-6,4.1c0,0,0,0,0,0l0,0c0,0,0,0,0,0H5.3C2.4,9.7,0,12.1,0,15c0,2.9,2.4,5.3,5.3,5.3h11.9 c0.3,0.7,1,1.2,1.9,1.2c1.1,0,2-0.9,2-2C21.1,18.3,20.2,17.4,19,17.4z"/> <path fill="#0072c6" d="M25.6,13.4C24.4,11,21.9,9.3,19,9.3c-3.5,0-6.4,2.4-7.1,5.7c-1.7,0.2-3.2,1.1-4.1,2.4h8.7 c0.6-0.7,1.5-1.2,2.5-1.2c1.8,0,3.2,1.5,3.2,3.2c0,1.8-1.5,3.2-3.2,3.2c-1,0-1.9-0.5-2.5-1.2H6.9c0.4,2.8,2.8,4.9,5.6,4.9 c0,0,0,0,0,0v0h13v0c0,0,0,0,0,0c3.6,0,6.5-2.9,6.5-6.5C32,16.3,29.1,13.4,25.6,13.4z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#dns"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                zones: 0,
                queries: 0
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? r(t) + u(t) : undefined
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0} zone(s), {1} million queries", n.zones, n.queries)
        },
        getSku: function () {
            var t = n.getPricingApiStore().data;
            return t ? {
                zones: t.graduatedOffers.zone.global.sku,
                queries: t.graduatedOffers.queries.global.sku
            } : ""
        },
        isValidOffer: function () {
            var t = n.getPricingApiStore().data;
            return t ? t.graduatedOffers.zone.global != undefined : !1
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function t(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            requests: i.offers.requests.prices[t.region],
            storage: i.offers.storage.prices[t.region]
        } : 0
    }

    function i(i) {
        var r = n.getPricingApiStore().data;
        return r ? {
            requests: t(i).requests * i.userRequestUnits * i.userRequestHours * (i.userRequestHoursFactor || "1"),
            storage: t(i).storage * i.userStorageUnits
        } : 0
    }

    function r(t, i, r) {
        var f = n.getPricingApiStore().data,
            u;
        return f ? i === "standard" ? (u = f.offers[r], typeof u.prices[t] != "undefined" && u) : i === "userdefined" ? !0 : void 0 : undefined
    }

    function e(n, t, i) {
        var u = r(n, t, i);
        return u && u.prices[n]
    }

    function o(n, t, i) {
        return !!r(n, t, i)
    }
    var u = "DocumentDB",
        f, n;
    f = React.createClass({
        displayName: "DocumentDb",
        onChange: Acom.Calculator.onChange,
        getLevels: function () {
            var n = this.props,
                i = n.dataStore.pricingData,
                t;
            if (n.tier === "standard") return t = i.levels.map(function (t) {
                var i = r(n.region, n.tier, t.slug);
                return {
                    slug: t.slug,
                    values: {
                        displayStrings: [t.displayName, i.localSSDStorage + " GB SSD", formatString("Request units {0}/sec", i.databaseRequestUnits)],
                        number: {
                            value: e(n.region, n.tier, t.slug),
                            decimals: 3,
                            format: "currency",
                            rate: "{0}/hr"
                        }
                    }
                }
            }), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "level-" + n.region,
                label: "Performance level",
                name: "level",
                options: t,
                delimiters: ["colon", "comma"],
                defaultValue: n.level,
                onChange: this.onChange
            }))
        },
        render: function () {
            var n = this.props,
                r = n.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: u,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: r.regions,
                defaultValue: n.region
            }), React.createElement(CalculatorDropdown, {
                label: "Tier",
                name: "tier",
                options: r.tiers,
                defaultValue: n.tier
            })), this.getLevels()), displayIf(n.tier === "standard", React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Collections",
                name: "collections",
                min: "1",
                max: "999",
                defaultValue: n.collections,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hours-" + n.hoursFactor,
                name: "hours",
                defaultValue: n.hours,
                factorsName: "hoursFactor",
                factorsDefault: n.hoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku)))))), displayIf(n.tier === "userdefined", React.createElement("div", null, React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Storage"), React.createElement(TextNumber, {
                label: "GB",
                name: "userStorageUnits",
                min: "1",
                max: "999999999",
                defaultValue: n.userStorageUnits,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(n).storage,
                decimals: "3",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per GB/Mo")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(n).storage,
                decimals: "2",
                format: "currency"
            }))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "RUs reserved"), React.createElement(TextNumber, {
                label: "x100 RU",
                name: "userRequestUnits",
                min: "4",
                max: "999999999",
                defaultValue: n.userRequestUnits,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factors-userRequestHours-" + n.userRequestHoursFactor,
                name: "userRequestHours",
                defaultValue: n.userRequestHours,
                factorsName: "userRequestHoursFactor",
                factorsDefault: n.userRequestHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(n).requests,
                decimals: "3",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per hour")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(n).requests,
                decimals: "2",
                format: "currency"
            }))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "documentdb",
        displayName: u,
        description: "Managed NoSQL document database-as-a-service",
        pricingApi: "/api/v1/pricing/documentdb/calculator/",
        component: f,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="documentdb" viewBox="0 0 50 50"> <path fill="#3999C6" d="M6.1,6.8v36.3c0,3.8,8.4,6.8,18.9,6.8V6.8H6.1z"/> <path fill="#59B4D9" d="M24.7,50H25c10.4,0,18.9-3.1,18.9-6.8V6.8H24.7V50z"/> <path fill="#FFFFFF" d="M43.9,6.8c0,3.8-8.4,6.8-18.9,6.8S6.1,10.6,6.1,6.8C6.1,3.1,14.6,0,25,0S43.9,3.1,43.9,6.8"/> <path fill="#7FBA00" d="M40,6.4c0,2.5-6.7,4.5-15,4.5s-15-2-15-4.5c0-2.5,6.7-4.5,15-4.5S40,3.9,40,6.4"/> <path fill="#B8D432" d="M36.9,9.2c2-0.8,3.1-1.7,3.1-2.8c0-2.5-6.7-4.5-15-4.5c-8.3,0-15,2-15,4.5c0,1,1.2,2,3.1,2.8 c2.7-1.1,7-1.8,11.9-1.8C29.8,7.4,34.1,8.1,36.9,9.2"/> <path fill="#FFFFFF" d="M19.6,41.8c-1.5,0-2.7-0.2-3.5-0.5c-0.9-0.3-1.5-0.8-1.9-1.4c-0.4-0.7-0.6-1.7-0.6-3v-2.2 c0-1.4-0.6-2.2-1.8-2.2v-2.7c1.2,0,1.8-0.7,1.8-2.2v-2c0-1.4,0.2-2.5,0.6-3.1c0.4-0.7,1-1.1,1.8-1.5c0.9-0.3,2-0.5,3.5-0.5v2.7 c-0.7,0-1.1,0.1-1.5,0.4c-0.3,0.3-0.5,0.8-0.5,1.5v1.7c0,1.1-0.1,2-0.4,2.7c-0.3,0.7-0.8,1.2-1.5,1.5v0c0.7,0.3,1.2,0.8,1.5,1.6 c0.3,0.7,0.5,1.7,0.5,2.8v1.5c0,0.7,0.1,1.2,0.4,1.5c0.3,0.3,0.8,0.5,1.5,0.5V41.8z"/> <path fill="#FFFFFF" d="M36.6,32.5c-1.2,0-1.8,0.7-1.8,2.2v2c0,1.4-0.2,2.5-0.6,3.1c-0.4,0.7-1,1.1-1.8,1.5c-0.9,0.3-2,0.5-3.5,0.5 v-2.7c0.7,0,1.2-0.1,1.5-0.4c0.3-0.3,0.5-0.8,0.5-1.5v-1.7c0-1.1,0.1-2,0.4-2.7c0.3-0.7,0.8-1.2,1.5-1.5v0 c-0.7-0.3-1.2-0.9-1.5-1.6c-0.3-0.7-0.5-1.7-0.5-2.8v-1.5c0-0.7-0.1-1.2-0.4-1.5c-0.3-0.3-0.8-0.5-1.5-0.5v-2.7 c1.5,0,2.7,0.2,3.5,0.5c0.9,0.3,1.5,0.8,1.9,1.4c0.4,0.7,0.6,1.7,0.6,3v2.2c0,1.4,0.6,2.2,1.8,2.2V32.5z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#documentdb"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                tier: "userdefined",
                level: "s1",
                collections: 1,
                hours: 744,
                hoursFactor: "1",
                userRequestUnits: 4,
                userRequestHours: 744,
                userRequestHoursFactor: "1",
                userStorageUnits: 0
            }
        },
        getPrice: function (t) {
            return n.getPricingApiStore().data ? t.tier === "standard" ? e(t.region, t.tier, t.level) * t.collections * t.hours * (t.hoursFactor || "1") : i(t).requests + i(t).storage : 0
        },
        getDisplayName: function (n) {
            return n.name || u
        },
        getSku: function (t) {
            if (!n.getPricingApiStore().data) return "";
            if (t.tier === "standard") {
                var i = r(t.region, t.tier, t.level);
                return i && i.skus[t.region] ? i.skus[t.region] : ""
            }
            return ""
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0} DocumentDB(s) {1} level, {2} {3}", n.collections, n.level, n.hours, factorLabel(n.hoursFactor))
        },
        isValidOffer: function (n) {
            return o(n.region, n.tier, n.level)
        },
        willUpdate: function (n, t) {
            return n.hoursFactor !== t.hoursFactor && (t.hours = factorInput(n.hoursFactor, t.hoursFactor, n.hours)), n.userRequestHoursFactor !== t.userRequestHoursFactor && (t.userRequestHours = factorInput(n.userRequestHoursFactor, t.userRequestHoursFactor, n.userRequestHours)), t
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
Acom.Organisms.EstimateName = React.createClass({
    displayName: "EstimateName",
    mixins: [Reflux.connect(Acom.Calculator.Stores.channelCalculator)],
    handleNameChange: function (n) {
        Acom.Calculator.Actions.channelCalculator.setEstimateName(n.target.value)
    },
    render: function () {
        var i = this,
            n = this.state,
            t = ["text-input"];
        return n.isChannelCalcEnabled ? (n.estimate.name || t.push("validationError"), React.createElement("div", {
            className: "wa-calcService"
        }, React.createElement("div", {
            className: "heading heading-discount"
        }, React.createElement("span", {
            className: "name"
        }, "Name: "), React.createElement("input", {
            name: "name",
            className: t.join(" "),
            defaultValue: n.estimate.name,
            placeholder: n.estimate.name,
            onChange: i.handleNameChange
        })), React.createElement(ModalDialog, {
            ref: "modalDialog",
            accept: "Continue",
            cancel: "Cancel",
            message: "You have modules that use the India or Government regions and they are not available in the Web Direct channel. If you continue these modules will be reset"
        }))) : !1
    }
});
! function () {
    "use strict";

    function r(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            ingress: i.offers[t.tier + "-permillionevents"].prices[t.region],
            throughput: i.offers[t.tier + "-perhour"].prices[t.region]
        } : undefined
    }

    function u(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.offers[t.tier + "-permillionevents"].prices[t.region] * t.events : 0
    }

    function f(t) {
        var i = n.getPricingApiStore().data,
            r = 0;
        return i ? (t.archive && i.offers[t.tier + "-perarchivehour"] && (r = t.hours * (t.hoursFactor || "1") * t.units * i.offers[t.tier + "-perarchivehour"].prices[t.region]), i.offers[t.tier + "-perhour"].prices[t.region] * t.hours * (t.hoursFactor || "1") * t.units + r) : 0
    }
    var t = "Event Hubs",
        i, n;
    i = React.createClass({
        displayName: "EventHubs",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var i = this.props,
                e = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: i.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: i.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: e.regions,
                defaultValue: i.region
            }), React.createElement(CalculatorDropdown, {
                label: "Pricing Tier",
                name: "tier",
                options: e.tiers,
                defaultValue: i.tier
            }), displayIf(i.tier === "standard", React.createElement("div", null, React.createElement(Checkbox, {
                label: "Archive",
                name: "archive",
                defaultChecked: i.archive
            }), React.createElement(Tooltip, null, formatReact("<p>The Azure Event Hubs Archive feature automatically processes and stores event data in your Azure storage account. While in preview, the Archive feature costs {0}/hr and is based on the number of Throughput Units selected for your Event Hub. For more information, please see the pricing details page.<\/p>", React.createElement(Acom.Atoms.Number, {
                value: e.offers["standard-perarchivehour"].prices[i.region],
                decimals: "2",
                format: "currency"
            })))))), React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "Maximum throughput units: 20. Up to 1MB per second of ingress events. Up to 2MB per second of egress events.")), React.createElement("div", {
                className: "cost"
            }, React.createElement("h4", null, "Ingress"), React.createElement(TextNumber, {
                label: "Millions of events",
                name: "events",
                min: "0",
                max: "999",
                defaultValue: i.events,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(i).ingress,
                decimals: "3",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per million")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u(i),
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku.ingressEvents))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h4", null, "Throughput"), React.createElement(TextNumber, {
                label: "Throughput Units",
                name: "units",
                min: "1",
                max: "20",
                defaultValue: i.units,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hours" + i.hoursFactor,
                name: "hours",
                defaultValue: i.hours,
                factorsName: "hoursFactor",
                factorsDefault: i.hoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(i).throughput,
                decimals: "3",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per unit/hour")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f(i),
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku.throughputUnit))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "event-hubs",
        displayName: t,
        description: "Receive telemetry from millions of devices",
        pricingApi: "/api/v1/pricing/event-hubs/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="event-hubs" viewBox="-163 237 32 32"> <path fill="#B8D432" d="M-144,251.5c0,0.3-0.2,0.5-0.5,0.5h-3.9c-0.3,0-0.5-0.2-0.5-0.5v-2.9c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.3,0,0.5,0.2,0.5,0.5V251.5z"/> <path fill="#B8D432" d="M-137,254.5c0,0.3-0.2,0.5-0.5,0.5h-3.9c-0.3,0-0.5-0.2-0.5-0.5v-2.9c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.3,0,0.5,0.2,0.5,0.5V254.5z"/> <path fill="#B8D432" d="M-144,257.5c0,0.3-0.2,0.5-0.5,0.5h-3.9c-0.3,0-0.5-0.2-0.5-0.5v-2.9c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.3,0,0.5,0.2,0.5,0.5V257.5z"/> <path fill="#B8D432" d="M-151,248.5c0,0.3-0.2,0.5-0.5,0.5h-4c-0.3,0-0.5-0.2-0.5-0.5v-3c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.4,0,0.6,0.2,0.6,0.5V248.5z"/> <path fill="#0072C6" d="M-133.5,238L-133.5,238h-3h-22.1h-1.9h-1c-0.3,0-0.5,0.2-0.5,0.5v6c0,0.3,0.2,0.5,0.5,0.5h3 c0.3,0,0.5-0.2,0.5-0.5V242h21v2.5c0,0.3,0.2,0.5,0.6,0.5h2.9c0.3,0,0.5-0.2,0.5-0.5v-3v-3C-133,238.2-133.2,238-133.5,238z"/> <path fill="#0072C6" d="M-133.5,261.1h-2.9c-0.3,0-0.5,0.2-0.5,0.5v2.4H-158v-2.5c0-0.3-0.2-0.5-0.6-0.5h-2.9 c-0.3,0-0.5,0.2-0.5,0.6v5.9c0,0.3,0.2,0.5,0.5,0.5h1h2h22.1h2.8h0.1c0.3,0,0.5-0.2,0.5-0.5v-5.9 C-133,261.3-133.2,261.1-133.5,261.1z"/> <path fill="#B8D432" d="M-151,254.5c0,0.3-0.2,0.5-0.5,0.5h-4c-0.3,0-0.5-0.2-0.5-0.5v-3c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.4,0,0.6,0.2,0.6,0.5V254.5z"/> <path fill="#B8D432" d="M-151,260.5c0,0.3-0.2,0.5-0.5,0.5h-4c-0.3,0-0.5-0.2-0.5-0.5v-3c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.4,0,0.6,0.2,0.6,0.5V260.5z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#event-hubs"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                tier: "basic",
                archive: !1,
                events: 0,
                units: 1,
                hours: 744,
                hoursFactor: "1"
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? u(t) + f(t) : undefined
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data,
                r;
            return !i || !i.offers ? "" : (r = {}, r.ingressEvents = i.offers[t.tier + "-permillionevents"].skus[t.region], r.throughputUnit = i.offers[t.tier + "-perhour"].skus[t.region], r)
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0} million events, {1} thoughput units(s) x {2} {3}, {4} tier. Archive added: {5}", n.events, n.units, n.hours, factorLabel(n.hoursFactor), n.tier, n.archive)
        },
        willUpdate: function (n, t) {
            return n.hoursFactor !== t.hoursFactor && (t.hours = factorInput(n.hoursFactor, t.hoursFactor, n.hours)), t
        },
        isValidOffer: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier + "-permillionevents"].prices[t.region] >= 0 : !1
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function a(n) {
        return c(n)
    }

    function t(t, i, r) {
        var f = n.getPricingApiStore().data,
            u;
        return f ? (u = f.portSpeedOffers[i + "-" + r], u && u.price[t] ? u : void 0) : undefined
    }

    function s(t, i, r) {
        var f = n.getPricingApiStore().data,
            u;
        return f ? (u = f.premiumOffers[i + "-" + r], u && u.price[t] ? u : void 0) : undefined
    }

    function u(n, i, r) {
        var u = t(n, i, r);
        if (u) return u.price[n]
    }

    function h(n, t, i) {
        var r = s(n, t, i);
        if (r) return r.price[n]
    }

    function c(n) {
        var t = u(n.region, n.plan, n.portSpeed);
        return n.premium && (t += h(n.region, n.plan, n.portSpeed)), t
    }

    function i(n, i, r) {
        return !!t(n, i, r)
    }

    function v(n, i, r, u) {
        var f = null;
        return f = u ? s(n, i, r) : t(n, i, r), f && f.skus[n] ? f.skus[n] : ""
    }

    function f(t) {
        var i = n.getPricingApiStore().data,
            r;
        return i ? (r = i.dataTransfersOffers[e(t, i)], {
            price: r.price[t.region],
            sku: r.skus[t.region]
        }) : 0
    }

    function l(t) {
        var i = n.getPricingApiStore().data;
        return i ? f(t).price * t.units * t.storageUnits : 0
    }

    function y(t) {
        var i = n.getPricingApiStore().data,
            r;
        if (!i) return "";
        r = e(t, i);
        switch (r) {
            case "zone1":
                return Core.Util.FormatString("{0}: {1}, {2}", "Zone 1", "North America", "Europe");
            case "zone2":
                return Core.Util.FormatString("{0}: {1}, {2}, {3}", "Zone 2", "Asia Pacific", "Japan", "Australia");
            case "zone3":
                return Core.Util.FormatString("{0}: {1}", "Zone 3", "Brazil");
            case "zone4":
                return Core.Util.FormatString("{0}", "DE (trustee): Germany");
            default:
                return ""
        }
        return ""
    }

    function e(n, t) {
        for (var i in t.availableRegionsPerZone)
            if (t.availableRegionsPerZone[i].indexOf(n.region) >= 0) return i;
        return ""
    }

    function p(t) {
        var r = n.getPricingApiStore().data;
        return r ? r.portSpeed.filter(function (n) {
            return i(t.region, t.plan, n.slug)
        }).map(function (n) {
            var i = u(t.region, t.plan, n.slug);
            return {
                slug: n.slug,
                values: {
                    displayStrings: [n.displayName],
                    number: {
                        value: i,
                        decimals: 2,
                        format: "currency",
                        rate: "{0}/mo"
                    }
                }
            }
        }) : []
    }
    var r = "ExpressRoute",
        o, n;
    o = React.createClass({
        displayName: "ExpressRoute",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                i = this.props.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: r,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: i.regions,
                defaultValue: n.region
            }), React.createElement(CalculatorDropdown, {
                label: "Data Plan",
                name: "plan",
                options: i.plans,
                defaultValue: n.plan
            })), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: n.plan + n.region,
                label: "Port speed cost",
                name: "portSpeed",
                options: p(n),
                delimiters: ["colon"],
                defaultValue: n.portSpeed,
                onChange: this.onChange
            }), React.createElement("div", null, React.createElement(Checkbox, {
                label: "Premium add-on",
                name: "premium",
                defaultChecked: n.premium
            }))), React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement(StaticNumber, {
                label: "Port speed cost",
                value: React.createElement(Acom.Atoms.Number, {
                    value: u(n.region, n.plan, n.portSpeed),
                    decimals: "2",
                    format: "currency"
                })
            }), displayIf(n.premium, React.createElement("div", {
                className: "math"
            }, "+")), displayIf(n.premium, React.createElement(StaticNumber, {
                label: "Premium",
                value: React.createElement(Acom.Atoms.Number, {
                    value: h(n.region, n.plan, n.portSpeed),
                    decimals: "2",
                    format: "currency"
                })
            })), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: c(n),
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.base, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.base))))), displayIf(n.plan === "metered", React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Additional outbound data transfer"), React.createElement("p", null, formatReact("The {0} circuit has a max outbound data transfer limit of {1} TB/mo ({2} GB/mo).", n.portSpeed, t(n.region, n.plan, n.portSpeed).outboundDataTransferLimit.toString(), (t(n.region, n.plan, n.portSpeed).outboundDataTransferLimit * 1024).toString())), React.createElement("h4", null, y(n)), React.createElement(FactoredInput, {
                key: "factor-units-" + n.storageUnits,
                defaultValue: n.units,
                name: "units",
                factorsName: "storageUnits",
                factorsDefault: n.storageUnits,
                factorUnit: "gbs",
                min: "0",
                max: "500",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per GB",
                value: React.createElement(Acom.Atoms.Number, {
                    value: f(n).price,
                    decimals: "3",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: l(n),
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku && n.sku.dataTransfers))))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "expressroute",
        displayName: r,
        description: "Dedicated private network fiber connections to Azure",
        pricingApi: "/api/v1/pricing/expressroute/calculator/",
        component: o,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="expressroute" viewBox="0 0 50 50"> <rect x="9.8" y="32.8" fill="#68217A" width="31" height="3.8"/> <rect x="4.4" y="23.4" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -13.5374 18.0172)" fill="#68217A" width="21.2" height="3.8"/> <rect x="24.5" y="23.4" transform="matrix(0.7071 0.7071 -0.7071 0.7071 28.2012 -17.3844)" fill="#68217A" width="21.2" height="3.8"/> <path fill="#7FBA00" d="M25,9.7c-3.1,0-5.6,2.5-5.6,5.6c0,3.1,2.5,5.6,5.6,5.6s5.6-2.5,5.6-5.6C30.6,12.2,28.1,9.7,25,9.7z M25,17.1 c-1,0-1.8-0.8-1.8-1.8s0.8-1.8,1.8-1.8s1.8,0.8,1.8,1.8S26,17.1,25,17.1z"/> <path fill="#7FBA00" d="M5.6,29.1c-3.1,0-5.6,2.5-5.6,5.6c0,3.1,2.5,5.6,5.6,5.6s5.6-2.5,5.6-5.6C11.2,31.6,8.7,29.1,5.6,29.1z M5.6,36.5c-1,0-1.8-0.8-1.8-1.8s0.8-1.8,1.8-1.8s1.8,0.8,1.8,1.8S6.6,36.5,5.6,36.5z"/> <path fill="#7FBA00" d="M44.4,29.1c-3.1,0-5.6,2.5-5.6,5.6c0,3.1,2.5,5.6,5.6,5.6s5.6-2.5,5.6-5.6C50,31.6,47.5,29.1,44.4,29.1z M44.4,36.5c-1,0-1.8-0.8-1.8-1.8s0.8-1.8,1.8-1.8s1.8,0.8,1.8,1.8S45.4,36.5,44.4,36.5z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#expressroute"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                plan: "metered",
                portSpeed: "50mbps",
                premium: !1,
                units: 0,
                storageUnits: "1",
                zone: "zone1"
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? a(t) + (t.plan === "metered" ? l(t) : 0) : 0
        },
        getDisplayName: function (n) {
            return n.name || r
        },
        willUpdate: function (t, r) {
            var o = n.getPricingApiStore().data,
                u, f;
            if (!i(r.region, r.plan, r.portSpeed))
                for (f = 0; u = o.portSpeed[f]; f++)
                    if (i(r.region, r.plan, u.slug)) {
                        r.portSpeed = u.slug;
                        break
                    }
            return r.zone = e(t, o), r
        },
        getSku: function (t) {
            var i = {};
            return n.getPricingApiStore().data ? (i.base = v(t.region, t.plan, t.portSpeed, t.premium), t.plan === "metered" && (i.dataTransfers = f(t).sku), i) : undefined
        },
        getDescription: function (n) {
            var t = "";
            return t = n.plan === "metered" ? Core.Util.FormatString("Metered data plan, {0} port speed, Outbound data transfer: {1} {2}/Month in {3}", n.portSpeed, n.zone, n.zoneStorageUnits, n.region) : Core.Util.FormatString("Unlimeted data plan, {0} port speed", n.portSpeed), n.premium && (t += " + premium add-on"), t
        },
        isValidOffer: function (n) {
            return i(n.region, n.plan, n.portSpeed)
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function t(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            executions: getGraduatedPrice(i.graduatedOffers.compute[t.region].prices, t.memorySize / 1024 * t.executionTime * t.executionCount),
            requests: getGraduatedPrice(i.graduatedOffers.requests[t.region].prices, Math.ceil(t.executionCount / 1e6))
        } : 0
    }
    var i = "Functions",
        r, n;
    r = React.createClass({
        displayName: "Functions",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var r = this.props,
                u = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: r.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: i,
                defaultValue: r.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: u.regions,
                defaultValue: r.region
            })), React.createElement("p", null, "The first 400,000 GB/s of execution and 1,000,000 executions are free.")), React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("h3", null, "Executions"), React.createElement(CalculatorDropdown, {
                label: "Memory size",
                name: "memorySize",
                options: u.memorySizes,
                defaultValue: r.memorySize,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(TextNumber, {
                label: "Execution time (in seconds)",
                name: "executionTime",
                min: "0",
                max: "9999",
                defaultValue: r.executionTime,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(TextNumber, {
                label: "Executions per month",
                name: "executionCount",
                min: "0",
                max: "999999999",
                defaultValue: r.executionCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(r).executions,
                decimals: "2",
                format: "currency"
            }))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h3", null, "Requests"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "2px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, r.executionCount), React.createElement("label", {
                className: "label"
            }, "Execution count")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(r).requests,
                decimals: "2",
                format: "currency"
            }))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "functions",
        displayName: i,
        description: "Process events with serverless code",
        pricingApi: "/api/v1/pricing/functions/calculator/",
        component: r,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="functions" viewBox="7 -7 64 64"> <path fill="#3999C6" d="M70.6,25.4c0.6-0.6,0.5-1.7,0-2.3L67.5,20L53.7,6.6c-0.6-0.6-1.5-0.6-2.2,0l0,0c-0.6,0.6-0.8,1.7,0,2.3 L66,23.1c0.6,0.6,0.6,1.7,0,2.3L51.2,40.1c-0.6,0.6-0.6,1.7,0,2.3l0,0c0.6,0.6,1.7,0.5,2.2,0l13.7-13.6c0,0,0,0,0.1-0.1L70.6,25.4z"/> <path fill="#3999C6" d="M7.4,25.4c-0.6-0.6-0.5-1.7,0-2.3l3.1-3.1L24.3,6.6c0.6-0.6,1.5-0.6,2.2,0l0,0c0.6,0.6,0.8,1.7,0,2.3 L12.3,23.1c-0.6,0.6-0.6,1.7,0,2.3l14.5,14.7c0.6,0.6,0.6,1.7,0,2.3l0,0c-0.6,0.6-1.7,0.5-2.2,0L10.6,29c0,0,0,0-0.1-0.1L7.4,25.4z"/> <polygon fill="#FCD116" points="54.6,-4.5 35.1,-4.5 24.6,25.1 37.4,25.2 27.4,54.5 55,15.4 41.6,15.4 "/> <polygon opacity="0.3" fill="#FF8C00" points="41.6,15.4 54.6,-4.5 44.4,-4.5 33.6,20.1 46.4,20.2  27.4,54.5 55,15.4 "/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#functions"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-west",
                memorySize: "128",
                executionTime: 0,
                executionCount: 0
            }
        },
        getPrice: function (i) {
            var r = n.getPricingApiStore().data;
            return r ? t(i).executions + t(i).requests : 0
        },
        getDisplayName: function (n) {
            return n.name || i
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0} MB Memory Size, {1} second(s) Execution time, {2} Execution(s)/month", n.memorySize, n.executionTime, n.executionCount)
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function r(n) {
        var r = i.getPricingApiStore().data,
            t;
        if (!r) return undefined;
        for (t = 0; t < r.nodes.length; t++)
            if (r.nodes[t].slug === n) return r.nodes[t].displayName
    }

    function u(n, t) {
        var r = i.getPricingApiStore().data;
        return r ? r.availableNodeCountPerCluster[n + "-" + t].count : undefined
    }

    function f(n, t) {
        var r = i.getPricingApiStore().data;
        return r ? r.availableNodeCountPerCluster[n + "-" + t].fixed ? r.availableNodeCountPerCluster[n + "-" + t].count : "999" : undefined
    }

    function v(n, t) {
        var r = i.getPricingApiStore().data;
        return r ? r.instances.filter(function (i) {
            return r.availableInstancesPerCluster[n + "-" + t].indexOf(i.slug) !== -1
        }) : undefined
    }

    function t(n, t, r) {
        var f = i.getPricingApiStore().data,
            u;
        return f ? (u = f.offers[r + "-" + t], typeof u.prices[n] != "undefined" && u) : undefined
    }

    function o(n, t, r) {
        var u = i.getPricingApiStore().data;
        return u ? typeof u.offers[r + "-" + t].prices[n] != "undefined" : undefined
    }

    function n(n, r, u) {
        var f = t(n, r, u),
            e = i.getPricingApiStore().data;
        return e ? f && f.prices[n] : 0
    }

    function c(n) {
        var i = ["usgov-virginia", "us-west-central", "canada-central", "canada-east"],
            t = 0;
        for (t; t < i.length; t++)
            if (i[t] === n.region) return !0
    }

    function y(n) {
        for (var i = {
                hadoop: ["hadoopHead", "hadoopWorker"],
                hbase: ["hbaseHead", "hbaseRegion", "hbaseZookeeper"],
                storm: ["stormNimbus", "stormZookeeper", "stormSupervisor"],
                spark: ["sparkHead", "sparkWorker"]
            }, t = 0; t < i[n.cluster].length; t++)
            if (n[i[n.cluster][t]] === "a10" || n[i[n.cluster][t]] === "a11") return !0
    }

    function e(n, i, r) {
        var u = t(n, i, r);
        return u && u.skus[n] ? u && u.skus[n] : ""
    }

    function l(n) {
        var u = i.getPricingApiStore().data,
            r = 0;
        if (!u) return 0;
        switch (n.cluster) {
            case "hadoop":
                r += n.hadoopHeadCount * t(n.region, n.hadoopHead, n.type).cores;
                r += n.hadoopWorkerCount * t(n.region, n.hadoopWorker, n.type).cores;
                n.rServer && (r += n.edgeServerCount * t(n.region, n.edgeServer, n.type).cores);
                break;
            case "hbase":
                r += n.hbaseHeadCount * t(n.region, n.hbaseHead, n.type).cores;
                r += n.hbaseRegionCount * t(n.region, n.hbaseRegion, n.type).cores;
                r += n.hbaseZookeeperCount * t(n.region, n.hbaseZookeeper, n.type).cores;
                n.rServer && (r += n.edgeServerCount * t(n.region, n.edgeServer, n.type).cores);
                break;
            case "storm":
                r += n.stormSupervisorCount * t(n.region, n.stormSupervisor, n.type).cores;
                r += n.stormNimbusCount * t(n.region, n.stormNimbus, n.type).cores;
                r += n.stormZookeeperCount * t(n.region, n.stormZookeeper, n.type).cores;
                n.rServer && (r += n.edgeServerCount * t(n.region, n.edgeServer, n.type).cores);
                break;
            case "spark":
                r += n.sparkHeadCount * t(n.region, n.sparkHead, n.type).cores;
                r += n.sparkWorkerCount * t(n.region, n.sparkWorker, n.type).cores;
                n.rServer && (r += n.edgeServerCount * t(n.region, n.edgeServer, n.type).cores)
        }
        return r
    }

    function s(n) {
        var t = i.getPricingApiStore().data;
        return t ? {
            premium: t.offers["premium-addon"].prices[n.region] * n.totalCores * n.premiumCoreHours * n.premiumCoreHoursFactor,
            rServer: t.offers["rserver-addon"].prices[n.region] * n.totalCores * n.rServerCoreHours * n.rServerCoreHoursFactor
        } : 0
    }
    var h = "HDInsight",
        a, i;
    a = React.createClass({
        displayName: "HDInsight",
        onChange: Acom.Calculator.onChange,
        getSizes: function (i) {
            var r = this.props,
                u = i === "edgenode" ? "rserver" : r.cluster;
            return v(u, i).filter(function (n) {
                return o(r.region, n.slug, r.type)
            }).map(function (i) {
                var u = t(r.region, i.slug, r.type),
                    f = n(r.region, i.slug, r.type, r.tier);
                return {
                    slug: i.slug,
                    values: {
                        displayStrings: [i.displayName, formatString("{0} cores", u.cores), formatString("{0} GB RAM", u.ram), formatString("{0} GB Disk", u.diskSize)],
                        number: {
                            value: f,
                            decimals: 2,
                            format: "currency",
                            rate: "{0}/hr"
                        }
                    }
                }
            })
        },
        getOffers: function () {
            var t = this.props;
            return t.cluster === "hadoop" ? React.createElement("div", null, React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, formatString("{0} node", r("head"))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "hadoopHead" + t.size + t.region,
                label: "Instance size",
                name: "hadoopHead",
                options: this.getSizes("head"),
                delimiters: ["colon", "comma"],
                defaultValue: t.hadoopHead,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "hadoopHeadCount",
                min: u("hadoop", "head"),
                max: f("hadoop", "head"),
                defaultValue: t.hadoopHeadCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hadoopHeadHours-" + t.hadoopHeadHoursFactor,
                name: "hadoopHeadHours",
                defaultValue: t.hadoopHeadHours,
                factorsName: "hadoopHeadHoursFactor",
                factorsDefault: t.hadoopHeadHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.hadoopHead, t.type, t.tier) * t.hadoopHeadCount * t.hadoopHeadHours * (t.hadoopHeadHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.hadoopHead, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.hadoopHead)))))), React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, formatString("{0} node", r("worker"))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "hadoopWorker" + t.size + t.region,
                label: "Instance size",
                name: "hadoopWorker",
                options: this.getSizes("worker"),
                delimiters: ["colon", "comma"],
                defaultValue: t.hadoopWorker,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "hadoopWorkerCount",
                min: u("hadoop", "worker"),
                max: f("hadoop", "worker"),
                defaultValue: t.hadoopWorkerCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hadoopWorkerHoursFactor-" + t.hadoopWorkerHoursFactor,
                name: "hadoopWorkerHours",
                defaultValue: t.hadoopWorkerHours,
                factorsName: "hadoopWorkerHoursFactor",
                factorsDefault: t.hadoopWorkerHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.hadoopWorker, t.type, t.tier) * t.hadoopWorkerCount * t.hadoopWorkerHours * (t.hadoopWorkerHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.hadoopWorker, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.hadoopWorker))))))) : t.cluster === "hbase" ? React.createElement("div", null, React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, formatString("{0} node", r("head"))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "hbaseHead" + t.size + t.region,
                label: "Instance size",
                name: "hbaseHead",
                options: this.getSizes("head"),
                delimiters: ["colon", "comma"],
                defaultValue: t.hbaseHead,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "hbaseHeadCount",
                min: u("hbase", "head"),
                max: f("hbase", "head"),
                defaultValue: t.hbaseHeadCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hbaseHeadHoursFactor-" + t.hbaseHeadHoursFactor,
                name: "hbaseHeadHours",
                defaultValue: t.hbaseHeadHours,
                factorsName: "hbaseHeadHoursFactor",
                factorsDefault: t.hbaseHeadHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.hbaseHead, t.type) * t.hbaseHeadCount * t.hbaseHeadHours * (t.hbaseHeadHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.hbaseHead, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.hbaseHead)))))), React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, formatString("{0} node", r("region"))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "hbaseRegion" + t.size + t.region,
                label: "Instance size",
                name: "hbaseRegion",
                options: this.getSizes("region"),
                delimiters: ["colon", "comma"],
                defaultValue: t.hbaseRegion,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "hbaseRegionCount",
                min: u("hbase", "region"),
                max: f("hbase", "region"),
                defaultValue: t.hbaseRegionCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hbaseRegionHoursFactor-" + t.hbaseRegionHoursFactor,
                name: "hbaseRegionHours",
                defaultValue: t.hbaseRegionHours,
                factorsName: "hbaseRegionHoursFactor",
                factorsDefault: t.hbaseRegionHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.hbaseRegion, t.type) * t.hbaseRegionCount * t.hbaseRegionHours * (t.hbaseRegionHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.hbaseRegion, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.hbaseRegion)))))), React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, formatString("{0} node", r("zookeeper"))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "hbaseZookeeper" + t.size + t.region,
                label: "Instance size",
                name: "hbaseZookeeper",
                options: this.getSizes("zookeeper"),
                delimiters: ["colon", "comma"],
                defaultValue: t.hbaseZookeeper,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "hbaseZookeeperCount",
                min: u("hbase", "zookeeper"),
                max: f("hbase", "zookeeper"),
                defaultValue: t.hbaseZookeeperCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-hbaseZookeeperHoursFactor-" + t.hbaseZookeeperHoursFactor,
                name: "hbaseZookeeperHours",
                defaultValue: t.hbaseZookeeperHours,
                factorsName: "hbaseZookeeperHoursFactor",
                factorsDefault: t.hbaseZookeeperHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.hbaseZookeeper, t.type) * t.hbaseZookeeperCount * t.hbaseZookeeperHours * (t.hbaseZookeeperHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.hbaseZookeeper, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.hbaseZookeeper))))))) : t.cluster === "storm" ? React.createElement("div", null, React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, formatString("{0} node", r("supervisor"))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "stormSupervisor" + t.size + t.region,
                label: "Instance size",
                name: "stormSupervisor",
                options: this.getSizes("supervisor"),
                delimiters: ["colon", "comma"],
                defaultValue: t.stormSupervisor,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "stormSupervisorCount",
                min: u("storm", "supervisor"),
                max: f("storm", "supervisor"),
                defaultValue: t.stormSupervisorCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-stormSupervisorHoursFactor-" + t.stormSupervisorHoursFactor,
                name: "stormSupervisorHours",
                defaultValue: t.stormSupervisorHours,
                factorsName: "stormSupervisorHoursFactor",
                factorsDefault: t.stormSupervisorHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.stormSupervisor, t.type) * t.stormSupervisorCount * t.stormSupervisorHours * (t.stormSupervisorHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.stormSupervisor, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.stormSupervisor)))))), React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, formatString("{0} node", r("nimbus"))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "stormNimbus" + t.size + t.region,
                label: "Instance size",
                name: "stormNimbus",
                options: this.getSizes("nimbus"),
                delimiters: ["colon", "comma"],
                defaultValue: t.stormNimbus,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "stormNimbusCount",
                min: u("storm", "nimbus"),
                max: f("storm", "nimbus"),
                defaultValue: t.stormNimbusCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-stormNimbusHoursFactor-" + t.stormNimbusHoursFactor,
                name: "stormNimbusHours",
                defaultValue: t.stormNimbusHours,
                factorsName: "stormNimbusHoursFactor",
                factorsDefault: t.stormNimbusHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.stormNimbus, t.type) * t.stormNimbusCount * t.stormNimbusHours * (t.stormNimbusHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.stormNimbus, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.stormNimbus)))))), React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, formatString("{0} node", r("zookeeper"))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "stormZookeeper" + t.size + t.region,
                label: "Instance size",
                name: "stormZookeeper",
                options: this.getSizes("zookeeper"),
                delimiters: ["colon", "comma"],
                defaultValue: t.stormZookeeper,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "stormZookeeperCount",
                min: u("storm", "zookeeper"),
                max: f("storm", "zookeeper"),
                defaultValue: t.stormZookeeperCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-stormZookeeperHoursFactor-" + t.stormZookeeperHoursFactor,
                name: "stormZookeeperHours",
                defaultValue: t.stormZookeeperHours,
                factorsName: "stormZookeeperHoursFactor",
                factorsDefault: t.stormZookeeperHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.stormZookeeper, t.type) * t.stormZookeeperCount * t.stormZookeeperHours * (t.stormZookeeperHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.stormZookeeper, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.stormZookeeper))))))) : t.cluster === "spark" ? React.createElement("div", null, React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, formatString("{0} node", r("head"))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "sparkHead" + t.size + t.region,
                label: "Instance size",
                name: "sparkHead",
                options: this.getSizes("head"),
                delimiters: ["colon", "comma"],
                defaultValue: t.sparkHead,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "sparkHeadCount",
                min: u("spark", "head"),
                max: f("spark", "head"),
                defaultValue: t.sparkHeadCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-sparkHeadHoursFactor-" + t.sparkHeadHoursFactor,
                name: "sparkHeadHours",
                defaultValue: t.sparkHeadHours,
                factorsName: "sparkHeadHoursFactor",
                factorsDefault: t.sparkHeadHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.sparkHead, t.type, t.tier) * t.sparkHeadCount * t.sparkHeadHours * (t.sparkHeadHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.sparkHead, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.sparkHead)))))), React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, formatString("{0} node", r("worker"))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "sparkWorker" + t.size + t.region,
                label: "Instance size",
                name: "sparkWorker",
                options: this.getSizes("worker"),
                delimiters: ["colon", "comma"],
                defaultValue: t.sparkWorker,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "sparkWorkerCount",
                min: u("spark", "worker"),
                max: f("spark", "worker"),
                defaultValue: t.sparkWorkerCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-sparkWorkerHoursFactor-" + t.sparkWorkerHoursFactor,
                name: "sparkWorkerHours",
                defaultValue: t.sparkWorkerHours,
                factorsName: "sparkWorkerHoursFactor",
                factorsDefault: t.sparkWorkerHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.sparkWorker, t.type, t.tier) * t.sparkWorkerCount * t.sparkWorkerHours * (t.sparkWorkerHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.sparkWorker, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.sparkWorker))))))) : void 0
        },
        render: function () {
            var e = this,
                t = e.props,
                i = t.dataStore.pricingData,
                o = i.clusterTypes.filter(function (n) {
                    return n.slug !== "rserver"
                }),
                a = i.types.map(function (n) {
                    return {
                        slug: n.slug,
                        displayName: n.displayName,
                        disabled: c(t)
                    }
                });
            return React.createElement("div", {
                key: t.cluster + t.node,
                onChange: e.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: t.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: h,
                defaultValue: t.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: i.regions,
                defaultValue: t.region
            }), React.createElement(CalculatorDropdown, {
                label: "Type",
                name: "type",
                options: a,
                defaultValue: t.type
            }), React.createElement("div", null, React.createElement(Checkbox, {
                label: "R-Server",
                name: "rServer",
                defaultChecked: t.rServer
            }))), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Cluster type",
                name: "cluster",
                options: o,
                defaultValue: t.cluster
            }), React.createElement(CalculatorDropdown, {
                label: "Tier",
                name: "tier",
                options: i.tiers,
                defaultValue: t.tier
            })), displayIf(c(t), React.createElement("p", null, "HDInsight is only offered with Linux in this region.")), displayIf(y(t), React.createElement("div", {
                className: "wa-notification calculator-notification"
            }, React.createElement("span", {
                className: "wa-iconBoxed"
            }, React.createElement("span", {
                className: "icon",
                dangerouslySetInnerHTML: {
                    __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="health-information" viewBox="0 0 21 21"> <title lang="en">Health Information<\/title> <path d="M11.042,20.833a10,10,0,1,1,10-10A10.011,10.011,0,0,1,11.042,20.833Z" transform="translate(-0.542 -0.333)" style="fill:#0073b0"/> <path d="M11.042,1.333a9.5,9.5,0,1,1-9.5,9.5,9.511,9.511,0,0,1,9.5-9.5m0-1a10.5,10.5,0,1,0,10.5,10.5,10.5,10.5,0,0,0-10.5-10.5Z" transform="translate(-0.542 -0.333)" style="fill:#0073b0"/> <circle cx="10.5" cy="6.131" r="1.631" style="fill:#fff"/> <polygon points="10.256 16.667 10.744 16.667 11.792 16.667 11.792 9.667 10.744 9.667 10.256 9.667 9.053 9.667 9.038 16.667 10.256 16.667" style="fill:#fff"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#health-information"><\/use><\/svg>'
                }
            })), React.createElement("p", null, "Selecting A10 or A11 node types requires all nodes to be A10 or A11."))), this.getOffers(), displayIf(t.rServer, React.createElement("div", {
                className: "detail line-item"
            }, React.createElement("h3", null, r("edgenode")), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "edge-server" + t.size + t.region,
                label: "Instance size",
                name: "edgeServer",
                options: this.getSizes("edgenode"),
                delimiters: ["colon", "comma"],
                defaultValue: t.edgeServer,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Instances",
                name: "edgeServerCount",
                min: u("rserver", "edgenode"),
                max: f("rserver", "edgenode"),
                defaultValue: t.edgeServerCount,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-edgeServerHours-" + t.edgeServerHoursFactor,
                name: "edgeServerHours",
                defaultValue: t.edgeServerHours,
                factorsName: "edgeServerHoursFactor",
                factorsDefault: t.edgeServerHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t.region, t.edgeServer, t.type, t.tier) * t.edgeServerCount * t.edgeServerHours * (t.edgeServerHoursFactor || "1"),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku.edgeServer, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.edgeServer))))))), displayIf(t.tier === "premium", React.createElement("div", {
                className: t.rServer ? "cost" : "cost no-divider"
            }, React.createElement("h3", null, "Premium surcharge"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "2px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, l(t)), React.createElement("label", {
                className: "label"
            }, "Total cores")), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.offers["premium-addon"].prices[t.region],
                decimals: "2",
                format: "currency"
            }), React.createElement("label", {
                className: "label"
            }, "Per core"))), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-premiumCoreHours-" + t.premiumCoreHoursFactor,
                name: "premiumCoreHours",
                defaultValue: t.premiumCoreHours,
                factorsName: "premiumCoreHoursFactor",
                factorsDefault: t.premiumCoreHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: s(t).premium,
                decimals: "2",
                format: "currency"
            })))))), displayIf(t.rServer, React.createElement("div", {
                className: t.tier === "premium" ? "cost sub-module" : "cost"
            }, React.createElement("h3", null, "R-Server surcharge"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "2px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, l(t)), React.createElement("label", {
                className: "label"
            }, "Total cores")), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.offers["rserver-addon"].prices[t.region],
                decimals: "2",
                format: "currency"
            }), React.createElement("label", {
                className: "label"
            }, "Per core"))), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-rServerCoreHours-" + t.rServerCoreHoursFactor,
                name: "rServerCoreHours",
                defaultValue: t.rServerCoreHours,
                factorsName: "rServerCoreHoursFactor",
                factorsDefault: t.rServerCoreHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: s(t).rServer,
                decimals: "2",
                format: "currency"
            })))))), React.createElement("div", {
                className: t.rServer || t.tier === "premium" ? "cost" : "cost no-divider"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            })))))))
        }
    });
    i = Acom.Calculator.createModule({
        slug: "hdinsight",
        displayName: h,
        description: "Provision cloud Hadoop, Spark, R Server, HBase, and Storm clusters",
        pricingApi: "/api/v1/pricing/hdinsight/calculator/",
        component: a,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="hdinsight" viewBox="0 0 50 50"> <polygon fill-rule="evenodd" clip-rule="evenodd" fill="#FCD116" points="17.2,14 13.7,14.6 10.6,16 7.9,17.7 5.3,20.8 3.9,22.3  2.5,22.8 2.1,21.9 2.8,21 2.9,19.7 3.4,19.7 3.8,20.1 3.7,18.8 3.2,18.4 3.2,17.9 2,18.6 0.8,19.9 0.6,21.1 1.1,22.1 1.5,23.7  2.4,24.1 3.4,24.1 4.3,23.5 3.7,26.6 4.3,30 3.6,31.6 1.5,33.9 1.8,35.4 2.9,37 4.8,38.3 5.9,38.5 7,38.5 6.3,41.5 8.9,42.6  12.2,43 13.3,42.2 13.4,40.3 14.7,38.2 14.8,36.5 17.8,36.8 20.6,36.5 17.8,38.2 18.3,40.2 20,43 21.8,43.7 23.1,43.2 23.7,42  26.6,39.8 27.2,40.3 31.7,40.5 32.6,39.7 32.7,38.4 32.4,37.9 32.2,34.4 30.7,31.4 30.9,30 31.8,30.5 34.4,32.9 35.6,33 37,32.4  38.4,31.4 39.1,29.1 43.1,29.4 45.6,28.4 47.6,26.6 49,23.9 49.4,20.7 49.1,17.1 48.3,13.8 47.5,12.7 46.4,12.4 44.5,14.5  42.8,15.1 41.3,12.6 39.8,11.2 38.9,10.7 35.7,7.9 33,6.5 30.4,6.3 27.3,6.8 24.6,7.8 22.8,9.3 21.3,11.1 19.8,11.5 "/> <polygon fill="#1E1E1E" points="3.7,20.8 4.1,21.3 4.2,20.7 3.9,20.7 "/> <path fill="#1E1E1E" d="M49.7,16.9c-0.2-1.5-0.6-3-1.2-4c-0.1-0.1-0.2-0.3-0.3-0.4c-0.3-0.3-0.7-0.5-1.1-0.7c-0.4-0.2-0.9-0.2-1.3,0 c-0.1,0.1-0.2,0.1-0.3,0.2c-0.2,0.2-0.4,0.5-0.6,0.8c-0.2,0.3-0.5,0.7-0.7,0.9c-0.3,0.3-0.7,0.4-1.1,0.6c-0.2-0.4-0.3-0.8-0.6-1.1 c-0.3-0.4-0.5-0.8-0.9-1.2c-0.3-0.3-0.5-0.5-0.8-0.8c-0.3-0.2-0.6-0.4-0.9-0.6c-0.9-0.6-1.6-1.2-2.4-1.9c-0.3-0.3-0.7-0.6-1-0.9 c-1.8-1.5-3.5-2.2-5.3-2.3c-1.8-0.1-3.7,0.4-6,1.3c-1.1,0.5-1.9,1-2.6,1.6c-0.7,0.6-1.2,1.3-1.9,2.2c-0.4,0-0.7,0.1-1,0.2 c-0.4,0.1-0.7,0.4-1.2,0.8c-0.3,0.3-0.6,0.6-0.9,0.8l0,0c-0.3,0.3-0.5,0.5-0.8,0.8c-2.1,0.3-3.7,0.7-5.2,1.3 c-1.5,0.6-2.9,1.4-4.3,2.6c-0.6,0.5-1.1,1-1.5,1.6c-0.4,0.6-0.8,1.1-1.1,1.7c-0.3,0.3-0.6,0.6-0.9,0.9c-0.3,0.3-0.6,0.5-1,0.6l0,0 c-0.2,0.1-0.3,0.1-0.3,0.1c0,0,0-0.1,0-0.1c0.5-0.5,0.6-1.2,0.6-1.9c0.1,0.1,0.1,0.2,0.2,0.3c0.1,0.1,0.1,0.2,0.2,0.3l0.2-0.2 l0.3,0.1c0.1-0.5,0.2-1,0.1-1.6c-0.1-0.3-0.2-0.6-0.5-0.8c0-0.1,0.1-0.1,0.1-0.2c0.1-0.2,0.2-0.4,0.2-0.7l-0.2-0.1l0,0l0.2,0.1 L4.2,17l-0.4,0.1c-0.6,0.1-1.8,0.8-2.7,1.7c-0.3,0.3-0.6,0.7-0.8,1.1C0,20.4,0,20.8,0,21.2c0.1,0.4,0.3,0.7,0.6,1.1 c0.1,0.3,0.1,0.5,0.2,0.7C0.9,23.2,1,23.4,1,23.6c0.3,0.5,0.7,0.9,1.1,1c0.4,0.1,0.8,0.1,1.2,0c-0.1,0.5-0.1,1-0.2,1.5 c0,0.7,0,1.5,0.1,2.4c0,0.2,0,0.4,0.1,0.6c0,0.2,0.1,0.4,0.1,0.6c-0.1,0.2-0.2,0.4-0.2,0.6c-0.1,0.3-0.2,0.7-0.4,1 c-0.3,0.3-0.5,0.5-0.8,0.8c-0.2,0.2-0.5,0.5-0.7,0.7c0,0-0.1,0.1-0.2,0.2c-0.5,0.5-0.6,0.6-0.5,1.4c0.1,0.5,0.3,1,0.5,1.6 c0.2,0.5,0.6,0.9,1,1.4C2.8,38,3.7,38.6,4.6,39c0.5,0.2,1.1,0.3,1.6,0.2c0,0.1,0,0.2-0.1,0.2c-0.1,0.2-0.2,0.4-0.3,0.7 c-0.6,1.4,0,2.1,1,2.5c0.5,0.2,1.1,0.4,1.6,0.5c0.1,0,0.2,0.1,0.4,0.1c0.6,0.2,1.8,0.5,2.8,0.6c1.1,0.1,2.1-0.2,2.4-1.2 c0.1-0.4,0.2-0.7,0.2-1c0-0.3,0-0.6,0-0.9c0.3-0.7,0.5-0.9,0.7-1.2c0-0.1,0.1-0.1,0.1-0.2c0.2-0.4,0.4-0.6,0.4-0.9c0-0.3,0-0.6,0-1 c0,0,0-0.1,0-0.2c0.6,0.1,1.3,0.1,1.9,0.1c0.3,0,0.6,0,1,0c-0.1,0-0.2,0.1-0.3,0.1c0,0-0.1,0-0.1,0.1c-0.9,0.4-0.9,1.3-0.6,2.1 c0.2,0.8,0.7,1.6,1.1,2c0.7,1,1.3,1.9,2,2.3c0.8,0.5,1.7,0.5,2.9-0.1c0.6-0.3,0.8-0.7,1-1.1c0.1-0.1,0.2-0.3,0.3-0.4 c0.2-0.2,0.8-0.7,1.5-1.2c0.2-0.2,0.4-0.3,0.7-0.5c0.2,0.1,0.3,0.2,0.6,0.3c0.3,0.1,0.7,0.1,1.1,0.1c0.3,0,1.4,0,2.1,0 c0.2,0,0.4,0,0.5,0c0.7,0,1.3,0,1.7-0.3c0.5-0.3,0.7-0.7,0.8-1.5c0-0.4,0-0.6,0-0.8c0-0.2-0.1-0.4-0.3-0.7c0-0.4,0-0.7,0-1.1 c0-0.4,0-0.8,0-1.1c0-0.4-0.1-0.8-0.2-1.2c-0.1-0.4-0.2-0.7-0.4-1.1c-0.1-0.3-0.2-0.5-0.3-0.8l-0.2,0.1l0,0l0.2-0.1v0 c-0.1-0.4-0.3-0.8-0.5-1.2c0-0.1,0-0.2,0-0.3c0.1,0.1,0.3,0.3,0.4,0.4l0.6,0.6c0.4,0.4,0.8,0.8,1.3,1.1c0.5,0.3,1,0.5,1.7,0.4 c0.7,0,1.5-0.3,2.2-0.8c0.6-0.5,1.1-1.1,1.4-1.8c0.1-0.2,0.1-0.4,0.2-0.6c0-0.2,0.1-0.3,0.1-0.5c1,0.2,2.2,0.2,3.2,0.1 c1-0.1,2.1-0.4,2.9-0.8c1.3-0.7,2.2-1.7,2.9-2.9l0,0c0.8-1.3,1.2-2.9,1.4-4.5C50.1,20.4,50,18.6,49.7,16.9z M34.7,29 c-0.3,1-0.8,2.7,0.6,3c0.5,0.1,0.8,0.1,1.5-0.3c-0.6,0.1-0.9,0.1-1.3,0c-0.4-0.1-0.6-0.3-0.7-0.6c0.1,0.1,0.3,0.1,0.7,0.2 c1,0.2,2-0.2,2.2-1c0.1-0.4,0.1-0.6,0.3-1.2c0.2,0.1,0.4,0.1,0.7,0.2c-0.1,0.4-0.3,0.8-0.4,1.3c-0.3,1.1-1.6,2-2.8,1.9 c-1.1,0-1.7-0.7-2.5-1.3c-0.5-0.4-1-0.9-1.5-1.3c-1.3-0.4-2.4-0.9-3.6-1.8c0.9,1,1.5,1.6,2.7,2.1c-0.2,1.8-0.8,3.1-1.3,4.8 c-0.2,0.8-2.1,3.9-2.7,4.2c-0.4,0.2-2.7,2.2-3.2,2.5c-0.3,0.4-0.6,1-1.1,1.3c-1.5,0.8-2.5-0.7-3.3-2c-0.4-0.6-1.4-2.3-0.5-2.8 c0.8-0.4,1.3-0.8,2.2-1.3c0.1,0.2,0.3,0.5,0.5,0.7c0-0.3-0.1-0.5-0.1-0.8c-0.1-0.5-0.1-0.8,0-1.3c0-0.4,0.1-0.9,0.1-1.3 c-0.1,0.5-0.4,0.9-0.5,1.4c-0.1,0.2-0.1,0.3-0.1,0.5c-1.9,0.4-3.9,0.4-5.8,0.1c-0.1-0.7-0.3-1.5-0.4-2c0,0.6,0,2.3,0,3.2 c0,0.7,0,1-0.4,1.6c-0.3,0.6-0.5,0.7-1,1.7c0,0.6,0,1-0.1,1.6c-0.3,1-3,0.2-3.7,0c-0.9-0.2-2.7-0.6-2.3-1.8c0.4-1,0.7-2.1,0.9-3.6 c-1.6-2.3-3.1-5.5-3.4-8.4c-0.2-2.2-0.1-3.6,0.4-4.9c0.8-2.1,1.8-4,3.5-5.5c2.3-2,4.4-2.8,7.8-3.3c-0.8,0.9-1.6,1.9-2.5,2.9 c-0.9,1-1.4,2.1-2,3.2c-0.8,1.6-0.8,2.2,0.3,3.5c0.9,1.2,1.4,1.7,1.7,2.9c-0.3,0.7-0.4,1.2-0.5,2.1c1.1,1.2,1.9,2,2.9,2.2 c1,0.2,1.9,0.2,2.8-0.3c2-1,3.9-2.4,6.2-2.5c1.1-2.6,1-4.8,0.4-7.4c-0.3-1.7-0.5-3.4-0.6-5.1c-0.4,1.8-0.5,3.4-0.2,5.2 c0.4,2.2,0.7,4.6-0.4,6.5c-2.1,0.2-3.9,1.4-5.8,2.4c-0.8,0.4-1.5,0.4-2.4,0.2C15.4,30.5,14.9,30,14,29c0-1,0.2-1.4,0.6-2.3 c0.7-1.4,1.5-2.7,2.4-4.1C16,23.9,15,25,14.2,26.2c-0.3-0.9-0.8-1.4-1.5-2.4c-0.7-1-0.8-1.4-0.3-2.6c0.6-1.2,1-2.2,2-3.2 c1.6-1.8,3.1-3.7,4.9-5.5c1-0.9,1.4-0.9,2.6-1.1c1.2-0.2,2.3-0.4,3.5-0.7C24.2,10.9,23.1,11,22,11c0,0,0,0,0,0 c1.1-1.4,1.7-2.2,3.5-3c4.4-1.9,7.2-2.1,10.6,0.8c0.9,0.8,1.7,1.5,2.6,2.1c-0.3,0-0.6,0.1-1,0.2c0.5-0.1,1,0,1.5,0.1 c0.1,0.1,0.3,0.2,0.4,0.3c0.6,0.4,1,0.6,1.4,1.2c0.5,0.6,0.8,1.3,1.2,2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.1-0.1-0.3-0.1-0.4-0.1 c-0.3,0-0.5,0-0.8,0.2c0,0,0,0,0,0c-0.4,0.2-0.9,0.4-1.3,0.4c0.2,0.1,0.6,0.1,0.8,0c0,0,0.1,0,0.1,0c-0.1,0.1-0.1,0.3-0.2,0.5 c0,0.2,0,0.5,0.1,0.7c0,0,0,0,0,0c0,0.1,0.1,0.1,0.1,0.2c-0.2,0.1-0.3,0.1-0.5,0.2c0.8-0.1,1.6-0.1,2.4,0c0.1,0.3,0.1,0.5,0.2,0.8 c-0.1,0-0.2,0-0.3,0c0,0,0,0,0,0c-0.4-0.3-0.8-0.3-1.4-0.1c-1.7,0.4-1.3,1.4-2.1,2.9c0.8-1,0.8-2.1,2.1-2.4c0.3-0.1,0.5-0.2,0.7-0.1 c-0.4,0.2-0.7,0.5-0.9,0.9c-0.4,1.1-0.1,1.9-0.6,2.9c0.5-0.9,0.5-1.7,1-2.7c0.2-0.3,0.8-0.9,1.1-0.9c0.1,0,0.2,0,0.3,0 c0.1,0.6,0.1,1.2,0.1,1.6c-0.1,0.9-0.3,2.2-0.4,2.7c0.5-0.6,0.7-1.8,0.9-2.7c0.2-0.9,0.2-2,0-3c-0.3-1.4,1.1-1.1,1.9-1.8 c0.6-0.5,1-1.2,1.5-1.7c0.5-0.5,1.4,0.2,1.6,0.8c0.9,2.2,1.3,5.7,1.1,8c-0.3,2.5-1.5,5.3-3.7,6.5c-2.8,1.6-6.2,0.6-9-0.3 c-0.6-0.2-1-0.5-1.5-0.8C34.8,27.7,34.9,28.4,34.7,29z M32.2,39.1c-0.1,1-0.4,1.1-1.4,1.1c-0.4,0-2.1,0-2.5-0.1 c-0.6-0.1-0.9-0.1-1.1-0.2c0.9-0.7,2.5-3.5,2.8-4.5c0.3-1,0.7-1.9,0.9-2.9c0.1,0.4,0.2,0.8,0.4,1.2c0.3,0.7,0.4,1.1,0.5,1.9 c0,0.8,0,1.6,0.1,2.4C32.2,38.5,32.2,38.6,32.2,39.1z M3,18.3c-0.2,0.3-0.3,0.6-0.3,0.8c-0.3,1.1,0.1,2.1-0.9,2.9 c0.5,0.9,0.4,1.3,1.5,0.9c0.4-0.2,0.8-0.4,1.1-0.7C4.3,22.6,4.1,23,4,23.4c0,0.1,0,0.1-0.1,0.2c-0.8,0.3-1.8,0.5-2.2-0.3 c-0.2-0.4-0.3-0.8-0.4-1.3C0,20.7,1.9,18.9,3,18.3z M3.1,19.5c0-0.1,0-0.3,0.1-0.4c0-0.1,0-0.1,0.1-0.2c0.3,0.2,0.3,0.4,0.4,0.8 C3.5,19.5,3.3,19.4,3.1,19.5z M4.1,31.2c0.6,2,1.6,4.1,2.7,5.8c0,0,0,0,0,0c-0.1,0.3-0.2,0.6-0.3,0.8c-0.8,1.1-2.8-0.5-3.4-1.1 C2.4,36,2,35.2,1.9,34.5c-0.1-0.5,0-0.5,0.4-0.9c0.5-0.5,1-1,1.5-1.5C3.9,31.8,4,31.5,4.1,31.2z M42.2,14.7c0,0.1,0.1,0.2,0.1,0.3 c0,0-0.1,0.1-0.1,0.1c-0.1-0.1-0.2-0.3-0.3-0.4C42,14.7,42.1,14.7,42.2,14.7z M5,20.8L5,20.8L5,20.8L5,20.8L5,20.8z M3.4,18.4 L3.4,18.4L3.4,18.4L3.4,18.4L3.4,18.4z M0.9,22.2L0.9,22.2L0.9,22.2L0.9,22.2L0.9,22.2z M14.9,36.9L14.9,36.9L14.9,36.9L14.9,36.9 L14.9,36.9z M39.3,29.5L39.3,29.5L39.3,29.5L39.3,29.5L39.3,29.5L39.3,29.5L39.3,29.5z M48.3,26.1L48.3,26.1L48.3,26.1L48.3,26.1 L48.3,26.1z"/> <path fill="#1E1E1E" d="M44.7,15.9c1.4-0.5,2.1-1.6,2.4-3c-0.6,1.1-1.4,2.1-2.6,2.6c-0.6,0.3-1,0.2-1.7,0.1 C43.5,15.9,44,16.1,44.7,15.9z"/> <path fill="#1E1E1E" d="M36.7,17.3c-0.4,0-0.9,0.1-1.5,0.2c0-0.2-0.1-0.3-0.1-0.5c-0.2-0.4-0.5-0.7-0.9-0.8c0.3-0.2,0.7-0.4,1-0.6 c-0.8,0.4-1.7,0.3-2.4,0.7c-0.6,0.4-1.4,1.7-2,2.2c0.4-0.2,0.8-0.5,1.2-0.8c0,0.2,0.1,0.5,0.2,0.7c0.2,0.3,0.4,0.6,0.7,0.7 c-0.2,0.3-0.4,0.6-0.5,1C33.5,18.8,35.1,17.7,36.7,17.3z"/> <path fill="#1E1E1E" d="M29.5,15.8c0.3-1.2,0.7-2.3,2.5-3.1C29.6,13.3,29.2,14.3,29.5,15.8z"/> <path fill="#1E1E1E" d="M33.4,27.2c-0.1,0.3-0.1,0.8-0.2,1.1c0.1-0.4,0.3-0.9,0.5-1.2c0.2-0.4,0.3-0.4,0.7-0.6 c0.3-0.1,0.8-0.4,1-0.5c-0.3,0-0.8,0.2-1.1,0.2C33.6,26.3,33.5,26.5,33.4,27.2z"/> <path fill="#1E1E1E" d="M20.6,13.7c-0.9,0.9-1.7,3.8-2,5c0.4-1,1.5-3.7,2.3-4.4c0.2-0.2,0.4-0.3,0.6-0.4c-0.6,1-0.5,1.2-0.3,2.5 c0.2-1.3,0.6-1.9,1.4-2.9c0.8-0.2,1.6-0.5,2.5-0.8c-1,0.1-1.9,0.2-2.9,0.3C21.3,13.2,21.1,13.2,20.6,13.7z"/> <path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFACB" d="M32.5,18.8c-0.2-0.3,0-0.7,0.3-0.9c0.3-0.2,0.7,0,0.9,0.3 c0,0,0,0.1,0,0.1c-0.3,0.2-0.6,0.5-0.9,0.8C32.7,19.1,32.5,19,32.5,18.8"/> <path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFACB" d="M39.9,15.9c0-0.3,0.3-0.5,0.5-0.5c0.3,0,0.5,0.3,0.5,0.5 c0,0.1,0,0.1,0,0.2c-0.3,0-0.5,0.1-0.8,0.2C40,16.3,39.9,16.1,39.9,15.9"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#hdinsight"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                type: "windows",
                cluster: "hadoop",
                tier: "standard",
                hadoopHead: "a3",
                hadoopHeadCount: 2,
                hadoopHeadHours: 744,
                hadoopHeadHoursFactor: "1",
                hadoopWorker: "a3",
                hadoopWorkerCount: 1,
                hadoopWorkerHours: 744,
                hadoopWorkerHoursFactor: "1",
                hbaseHead: "a3",
                hbaseHeadCount: 2,
                hbaseHeadHours: 744,
                hbaseHeadHoursFactor: "1",
                hbaseRegion: "a3",
                hbaseRegionCount: 1,
                hbaseRegionHours: 744,
                hbaseRegionHoursFactor: "1",
                hbaseZookeeper: "a2",
                hbaseZookeeperCount: 3,
                hbaseZookeeperHours: 744,
                hbaseZookeeperHoursFactor: "1",
                stormSupervisor: "a3",
                stormSupervisorCount: 1,
                stormSupervisorHours: 744,
                stormSupervisorHoursFactor: "1",
                stormNimbus: "a3",
                stormNimbusCount: 2,
                stormNimbusHours: 744,
                stormNimbusHoursFactor: "1",
                stormZookeeper: "a1",
                stormZookeeperCount: 3,
                stormZookeeperHours: 744,
                stormZookeeperHoursFactor: "1",
                sparkHead: "a3",
                sparkHeadCount: 2,
                sparkHeadHours: 744,
                sparkHeadHoursFactor: "1",
                sparkWorker: "a3",
                sparkWorkerCount: 1,
                sparkWorkerHours: 744,
                sparkWorkerHoursFactor: "1",
                rServer: !1,
                edgeServer: "d4v2",
                edgeServerCount: 1,
                edgeServerHours: 744,
                edgeServerHoursFactor: "1",
                rServerCoreHours: 744,
                rServerCoreHoursFactor: "1",
                premiumCoreHours: 744,
                premiumCoreHoursFactor: "1",
                totalCores: 0
            }
        },
        getPrice: function (t) {
            var r = 0;
            if (!i.getPricingApiStore().data) return 0;
            switch (t.cluster) {
                case "hadoop":
                    r += n(t.region, t.hadoopHead, t.type, t.tier) * t.hadoopHeadCount * t.hadoopHeadHours * (t.hadoopHeadHoursFactor || "1") + n(t.region, t.hadoopWorker, t.type, t.tier) * t.hadoopWorkerCount * t.hadoopWorkerHours * (t.hadoopWorkerHoursFactor || "1");
                    break;
                case "hbase":
                    r += n(t.region, t.hbaseHead, t.type) * t.hbaseHeadCount * t.hbaseHeadHours * (t.hbaseHeadHoursFactor || "1") + n(t.region, t.hbaseRegion, t.type) * t.hbaseRegionCount * t.hbaseRegionHours * (t.hbaseRegionHoursFactor || "1") + n(t.region, t.hbaseZookeeper, t.type) * t.hbaseZookeeperCount * t.hbaseZookeeperHours * (t.hbaseZookeeperHoursFactor || "1");
                    break;
                case "storm":
                    r += n(t.region, t.stormSupervisor, t.type) * t.stormSupervisorCount * t.stormSupervisorHours * (t.stormSupervisorHoursFactor || "1") + n(t.region, t.stormNimbus, t.type) * t.stormNimbusCount * t.stormNimbusHours * (t.stormNimbusHoursFactor || "1") + n(t.region, t.stormZookeeper, t.type) * t.stormZookeeperCount * t.stormZookeeperHours * (t.stormZookeeperHoursFactor || "1");
                    break;
                case "spark":
                    r += n(t.region, t.sparkHead, t.type, t.tier) * t.sparkHeadCount * t.sparkHeadHours * (t.sparkHeadHoursFactor || "1") + n(t.region, t.sparkWorker, t.type, t.tier) * t.sparkWorkerCount * t.sparkWorkerHours * (t.sparkWorkerHoursFactor || "1")
            }
            return t.rServer && (r += n(t.region, t.edgeServer, t.type) * t.edgeServerCount * t.edgeServerHours * (t.edgeServerHoursFactor || "1"), r += s(t).rServer), t.tier === "premium" && (r += s(t).premium), r
        },
        getDisplayName: function (n) {
            return n.name || h
        },
        willUpdate: function (n, t, i) {
            var f, e, r, u;
            if (n.region !== t.region && (t.hadoopHead = "a3", t.hadoopWorker = "a3", t.edgeServer = "d4v2", t.hbaseHead = "a3", t.hbaseRegion = "a3", t.hbaseZookeeper = "a2", t.stormNimbus = "a3", t.stormSupervisor = "a3", t.stormZookeeper = "a1", t.sparkHead = "a3", t.sparkWorker = "a3"), n.cluster !== t.cluster && (t.tier = "standard"), i.hadoopHead || i.hadoopWorker || i.hbaseHead || i.hbaseRegion || i.hbaseZookeeper || i.stormNimbus || i.stormSupervisor || i.stormZookeeper || i.sparkHead || i.sparkWorker) {
                for (f = {
                        hadoop: ["hadoopHead", "hadoopWorker"],
                        hbase: ["hbaseHead", "hbaseRegion", "hbaseZookeeper"],
                        storm: ["stormNimbus", "stormZookeeper", "stormSupervisor"],
                        spark: ["sparkHead", "sparkWorker"]
                    }, e = !1, u = 0; u < f[t.cluster].length && !e; u++) r = f[t.cluster][u], (i[r] === "a10" || i[r] === "a11") && (e = !0);
                if (e)
                    for (u = 0; u < f[t.cluster].length; u++) r = f[t.cluster][u], t[r] !== "a10" && t[r] !== "a11" && (i[r] = "a10");
                else
                    for (u = 0; u < f[t.cluster].length; u++) r = f[t.cluster][u], (t[r] === "a10" || t[r] === "a11") && (i[r] !== "a10" || i[r] !== "a11") && (i[r] = v(t.cluster, r.replace(t.cluster, "").toLowerCase())[0].slug)
            }
            return n.hadoopHeadHoursFactor !== t.hadoopHeadHoursFactor && (t.hadoopHeadHours = factorInput(n.hadoopHeadHoursFactor, t.hadoopHeadHoursFactor, n.hadoopHeadHours)), n.hadoopWorkerHoursFactor !== t.hadoopWorkerHoursFactor && (t.hadoopWorkerHours = factorInput(n.hadoopWorkerHoursFactor, t.hadoopWorkerHoursFactor, n.hadoopWorkerHours)), n.hbaseHeadHoursFactor !== t.hbaseHeadHoursFactor && (t.hbaseHeadHours = factorInput(n.hbaseHeadHoursFactor, t.hbaseHeadHoursFactor, n.hbaseHeadHours)), n.hbaseRegionHoursFactor !== t.hbaseRegionHoursFactor && (t.hbaseRegionHours = factorInput(n.hbaseRegionHoursFactor, t.hbaseRegionHoursFactor, n.hbaseRegionHours)), n.hbaseZookeeperHoursFactor !== t.hbaseZookeeperHoursFactor && (t.hbaseZookeeperHours = factorInput(n.hbaseZookeeperHoursFactor, t.hbaseZookeeperHoursFactor, n.hbaseZookeeperHours)), n.stormSupervisorHoursFactor !== t.stormSupervisorHoursFactor && (t.stormSupervisorHours = factorInput(n.stormSupervisorHoursFactor, t.stormSupervisorHoursFactor, n.stormSupervisorHours)), n.stormNimbusHoursFactor !== t.stormNimbusHoursFactor && (t.stormNimbusHours = factorInput(n.stormNimbusHoursFactor, t.stormNimbusHoursFactor, n.stormNimbusHours)), n.stormZookeeperHoursFactor !== t.stormZookeeperHoursFactor && (t.stormZookeeperHours = factorInput(n.stormZookeeperHoursFactor, t.stormZookeeperHoursFactor, n.stormZookeeperHours)), n.sparkHeadHoursFactor !== t.sparkHeadHoursFactor && (t.sparkHeadHours = factorInput(n.sparkHeadHoursFactor, t.sparkHeadHoursFactor, n.sparkHeadHours)), n.sparkWorkerHoursFactor !== t.sparkWorkerHoursFactor && (t.sparkWorkerHours = factorInput(n.sparkWorkerHoursFactor, t.sparkWorkerHoursFactor, n.sparkWorkerHours)), n.edgeServerHoursFactor !== t.edgeServerHoursFactor && (t.edgeServerHours = factorInput(n.edgeServerHoursFactor, t.edgeServerHoursFactor, n.edgeServerHours)), n.premiumCoreHoursFactor !== t.premiumCoreHoursFactor && (t.premiumCoreHours = factorInput(n.premiumCoreHoursFactor, t.premiumCoreHoursFactor, n.premiumCoreHours)), n.rServerCoreHoursFactor !== t.rServerCoreHoursFactor && (t.rServerCoreHours = factorInput(n.rServerCoreHoursFactor, t.rServerCoreHoursFactor, n.rServerCoreHours)), c(t) && (t.type = "linux"), t.totalCores = l(t), t
        },
        getSku: function (n) {
            var t = {};
            return i.getPricingApiStore().data ? (n.cluster === "hadoop" ? (t.hadoopHead = e(n.region, n.hadoopHead, n.type), t.hadoopWorker = e(n.region, n.hadoopWorker, n.type)) : n.cluster === "hbase" ? (t.hbaseHead = e(n.region, n.hbaseHead, n.type), t.hbaseRegion = e(n.region, n.hbaseRegion, n.type), t.hbaseZookeeper = e(n.region, n.hbaseZookeeper, n.type)) : n.cluster === "storm" ? (t.stormSupervisor = e(n.region, n.stormSupervisor, n.type), t.stormNimbus = e(n.region, n.stormNimbus, n.type), t.stormZookeeper = e(n.region, n.stormZookeeper, n.type)) : n.cluster === "spark" && (t.sparkHead = e(n.region, n.sparkHead, n.type), t.sparkWorker = e(n.region, n.sparkWorker, n.type)), t) : ""
        },
        getDescription: function (n) {
            var t = n.cluster,
                i = t == "storm" ? "Supervisor" : "Head",
                r = t == "hbase" ? "Region" : t == "storm" ? "Nimbus" : "Worker",
                h = Core.Util.FormatString("{0}{1}Count", t, i),
                e = Core.Util.FormatString("{0}{1}Hours", t, i),
                c = Core.Util.FormatString("{0}Factor", e),
                l = Core.Util.FormatString("{0}{1}Count", t, r),
                o = Core.Util.FormatString("{0}{1}Hours", t, r),
                a = Core.Util.FormatString("{0}Factor", o),
                u = Core.Util.FormatString("Type: {0}, cluster type: {1}.", n.type, n.cluster);
            if (u += Core.Util.FormatString(" {0} node: {1} size, {2} instances x {3} hours.", i, n[t + i].toUpperCase(), n[h], n[e], factorLabel(n[c])), u += Core.Util.FormatString(" {0} node: {1} size, {2} instances x {3} hours.", r, n[t + r].toUpperCase(), n[l], n[o], factorLabel(n[a])), t == "hbase" || t == "storm") {
                var f = "Zookeeper",
                    v = Core.Util.FormatString("{0}{1}Count", t, f),
                    s = Core.Util.FormatString("{0}{1}Hours", t, f),
                    y = Core.Util.FormatString("{0}Factor", s);
                u += Core.Util.FormatString(" {0} node: {1} size, {2} instances x {3} hours.", f, n[t + f].toUpperCase(), n[v], n[s], factorLabel(n[y]))
            }
            return u
        },
        isValidOffer: function (n) {
            return n.cluster === "hadoop" ? o(n.region, n.hadoopHead, n.type) : n.cluster === "hbase" ? o(n.region, n.hbaseHead, n.type) : n.cluster === "storm" ? o(n.region, n.stormSupervisor, n.type) : n.cluster === "spark" ? o(n.region, n.sparkHead, n.type) : void 0
        }
    });
    Acom.Calculator.Actions.modules.register(i)
}();
! function () {
    "use strict";
    var t = "HockeyApp",
        i, n;
    i = React.createClass({
        displayName: "HockeyApp",
        onChange: Acom.Calculator.onChange,
        getPlanInfo: function () {
            var i = this.props,
                n = i.dataStore.pricingData,
                r, t = 0;
            for (t; t < n.tiers.length; t++)
                if (n.tiers[t].slug === i.tier) {
                    r = n.tiers[t].displayName;
                    break
                }
            return React.createElement("p", null, formatReact("Business {0} plan: {1} apps, {2} owners", r, n.offers[i.tier].applications.toString(), n.offers[i.tier].owners.toString()))
        },
        render: function () {
            var n = this.props,
                i = n.dataStore.pricingData,
                r = i.tiers.map(function (n) {
                    var t = i.offers[n.slug].prices.global;
                    return {
                        slug: n.slug,
                        values: {
                            displayStrings: [n.displayName],
                            number: {
                                value: t,
                                decimals: 0,
                                format: "currency",
                                rate: "{0}/mo"
                            }
                        }
                    }
                });
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: i.regions,
                defaultValue: n.region
            }), React.createElement(DetailedDropdown, {
                key: "tier-" + n.region,
                label: "Business Plan",
                name: "tier",
                options: r,
                delimiters: ["colon"],
                defaultValue: n.tier,
                onChange: this.onChange
            })), this.getPlanInfo()), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "hockeyapp",
        displayName: t,
        description: "Deploy mobile apps, collect feedback and crash reports, and monitor usage",
        pricingApi: "/api/v1/pricing/hockeyapp/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="hockeyapp" viewBox="0 0 50 50"> <path fill="#009EE1" d="M45.405,31.138c0.159-0.113,0.377-0.017,0.408,0.175c0.018,0.115,0.027,0.231,0.027,0.348 c0,3.241-6.945,7.662-20.836,7.662S4.167,34.902,4.167,31.661c0-0.116,0.009-0.231,0.027-0.344c0.03-0.192,0.249-0.288,0.408-0.175 c3.442,2.449,10.242,4.535,20.399,4.535C35.164,35.677,41.965,33.589,45.405,31.138z"/> <path fill="#009EE1" d="M25.001,29.427c-11.266,0-18.724-2.514-22.375-5.42c-0.126-0.1-0.316-0.063-0.389,0.08 c-0.189,0.369-0.284,0.753-0.284,1.151c0,3.584,7.683,8.356,23.048,8.356s23.046-4.772,23.046-8.356 c0-0.397-0.095-0.782-0.284-1.151c-0.073-0.143-0.263-0.18-0.389-0.08C43.723,26.913,36.266,29.427,25.001,29.427z"/> <path fill="#009EE1" d="M25.001,10.677C8.334,10.677,0,13.575,0,17.708c0,4.133,8.334,9.636,25.001,9.636S50,21.841,50,17.708 C50,13.575,41.667,10.677,25.001,10.677z M25,22.135c-11.806,0-17.708-3.012-17.708-5.078S13.194,13.802,25,13.802 s17.708,1.189,17.708,3.255S36.806,22.135,25,22.135z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#hockeyapp"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                tier: "free"
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier].prices.global : undefined
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getDescription: function () {
            return ""
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier].skus ? i.offers[t.tier].skus[t.region] : "" : ""
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function r(t, i) {
        var u = n.getPricingApiStore().data,
            r = u.offers[i].messagesPerDay;
        return u ? (r === 3e3 ? r = "3k" : r === 5e4 ? r = "50k" : r === 15e5 && (r = "1.5mil"), {
            devices: u.offers[i].devices,
            messages: r,
            price: u.offers[i].prices[t]
        }) : undefined
    }
    var t = "IoT Hub",
        i, n;
    i = React.createClass({
        displayName: "IotHub",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var i = this.props,
                u = n.getPricingApiStore().data,
                f = u.tiers.map(function (n) {
                    var t = r(i.region, n.slug);
                    return t.devices === 0 && (t.devices = "Unlimited"), {
                        slug: n.slug,
                        values: {
                            displayStrings: [n.displayName, formatString("{0} devices", t.devices), formatString("{0} msgs/day", t.messages.toLocaleString(Acom.currentCulture))],
                            number: {
                                value: t.price,
                                decimals: 0,
                                format: "currency",
                                rate: "{0}/mo"
                            }
                        }
                    }
                });
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: i.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: i.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: u.regions,
                defaultValue: i.region
            })), React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(DetailedDropdown, {
                key: "tier-" + i.region,
                label: "Tier",
                name: "tier",
                options: f,
                delimiters: ["colon", "comma"],
                defaultValue: i.tier,
                onChange: this.onChange
            }))), displayIf(i.tier === "free", React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku))))), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Units",
                name: "units",
                min: "0",
                max: "9999",
                defaultValue: i.units,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per unit",
                value: React.createElement(Acom.Atoms.Number, {
                    value: u.offers[i.tier].prices[i.region],
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku)))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "iot-hub",
        displayName: t,
        description: "Connect, monitor, and control billions of IoT assets",
        pricingApi: "/api/v1/pricing/iot-hub/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="iot-hub" viewBox="0 0 32 32"> <circle fill="#0072c6" cx="13.4" cy="4.9" r="3.1"/> <circle fill="#0072c6" cx="20.5" cy="14.9" r="3.7"/> <circle fill="#0072c6" cx="26.7" cy="25.9" r="2.9"/> <circle fill="#0072c6" cx="15.2" cy="23.9" r="2.5"/> <circle fill="#0072c6" cx="5.1" cy="16.3" r="2.5"/> <rect fill="#0072c6" x="10.7" y="9" transform="matrix(0.5751 0.8181 -0.8181 0.5751 15.1512 -9.6241)" width="12.3" height="1.6"/> <rect fill="#0072c6" x="17.2" y="19.4" transform="matrix(0.4968 0.8679 -0.8679 0.4968 29.4089 -10.1933)" width="12.6" height="1.6"/> <rect fill="#0072c6" x="11.9" y="7.9" transform="matrix(8.274771e-002 0.9966 -0.9966 8.274771e-002 27.1578 1.5262)" width="1.6" height="15.3"/> <rect fill="#0072c6" x="16.9" y="14.1" transform="matrix(0.8565 0.5161 -0.5161 0.8565 12.5121 -6.3586)" width="1.6" height="10.4"/> <path fill="#0072c6" d="M31.5,0h-8.1c-0.3,0-0.5,0.2-0.5,0.6v2.9c0,0.3,0.2,0.5,0.5,0.5H28v4.5C28,8.8,28.2,9,28.6,9h2.9 C31.8,9,32,8.8,32,8.5v-8C32,0.2,31.8,0,31.5,0z"/> <path fill="#0072c6" d="M0.5,31.9h8.1c0.3,0,0.5-0.2,0.5-0.6v-2.9c0-0.3-0.2-0.5-0.5-0.5H4v-4.5c0-0.3-0.2-0.5-0.6-0.5H0.5 c-0.3,0-0.5,0.2-0.5,0.5l0,8C0,31.7,0.2,31.9,0.5,31.9z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#iot-hub"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                tier: "free",
                units: 1
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? t.tier === "free" ? i.offers[t.tier].prices[t.region] : i.offers[t.tier].prices[t.region] * t.units : undefined
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0} tier", n.tier)
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier].skus ? i.offers[t.tier].skus[t.region] : "" : ""
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function n(n) {
        var i = t.getPricingApiStore().data.classicOffers;
        return i ? {
            instance: getGraduatedPrice(i[n.region + "-instancepublic"].prices, n.instance) * n.instanceHours * (n.instanceHoursFactor || "1"),
            loadBalanced: getGraduatedPrice(i[n.region + "-loadbalanced"].prices, n.loadBalanced) * n.loadBalancedHours * (n.loadBalancedHoursFactor || "1"),
            reserved: getGraduatedPrice(i[n.region + "-reservation"].prices, n.reserved) * n.reservedHours * (n.reservedHoursFactor || "1"),
            remaps: getGraduatedPrice(i[n.region + "-remap"].prices, n.remaps)
        } : undefined
    }

    function u(n) {
        var i = t.getPricingApiStore().data;
        return i ? getGraduatedPrice(i.armOffers[n.region + "-instancepublic"].prices, n["public"]) * n.publicHours * (n.publicHoursFactor || "1") : undefined
    }
    var i = "IP Addresses",
        r, t;
    r = React.createClass({
        displayName: "IpAddresses",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var t = this.props,
                r = t.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: t.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: i,
                defaultValue: t.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: r.regions,
                defaultValue: t.region,
                onChange: this.onChange
            }), React.createElement(CalculatorDropdown, {
                label: "Type",
                name: "type",
                options: r.offerTypes,
                defaultValue: t.type,
                onChange: this.onChange
            })), displayIf(t.type === "arm", React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "Common price for load balanced or virtual machines."))), displayIf(t.type === "classic", React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("h3", null, "Instance-level IP Addresses"), React.createElement(TextNumber, {
                label: "Addresses",
                name: "instance",
                min: "0",
                max: "999",
                defaultValue: t.instance,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-instanceHoursFactor-" + t.instanceHoursFactor,
                name: "instanceHours",
                defaultValue: t.instanceHours,
                factorsName: "instanceHoursFactor",
                factorsDefault: t.instanceHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t).instance,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku && t.sku.instance))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Load Balanced IP Addresses"), React.createElement(TextNumber, {
                label: "Addresses",
                name: "loadBalanced",
                min: "0",
                max: "6",
                defaultValue: t.loadBalanced,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-loadBalancedHoursFactor-" + t.loadBalancedHoursFactor,
                name: "loadBalancedHours",
                defaultValue: t.loadBalancedHours,
                factorsName: "loadBalancedHoursFactor",
                factorsDefault: t.loadBalancedHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t).loadBalanced,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku && t.sku.loadBalanced))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Reserved IP Addresses"), React.createElement(TextNumber, {
                label: "Addresses",
                name: "reserved",
                min: "0",
                max: "20",
                defaultValue: t.reserved,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-reservedHoursFactor-" + t.reservedHoursFactor,
                name: "reservedHours",
                defaultValue: t.reservedHours,
                factorsName: "reservedHoursFactor",
                factorsDefault: t.reservedHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t).reserved,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku && t.sku.reserved))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h3", null, "IP Address Remaps"), React.createElement(TextNumber, {
                label: "Addresses",
                name: "remaps",
                min: "0",
                max: "999",
                defaultValue: t.remaps,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t).remaps,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku && t.sku.remaps))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            })))))), React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("h3", null, "Public IP Addresses"), React.createElement(TextNumber, {
                key: t.type,
                label: "Addresses",
                name: "public",
                min: "0",
                max: "999",
                defaultValue: t["public"],
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(FactoredInput, {
                key: "factor-publicHoursFactor-" + t.publicHoursFactor,
                name: "publicHours",
                defaultValue: t.publicHours,
                factorsName: "publicHoursFactor",
                factorsDefault: t.publicHoursFactor || "1",
                factorUnit: "hours",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u(t),
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku && t.sku.armInstance))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            }))))))))
        }
    });
    t = Acom.Calculator.createModule({
        slug: "ip-addresses",
        displayName: i,
        description: "A dynamic or reserved address used to identify a given cloud service, virtual machine, or role instance used on Azure that follow the Internet Protocol.",
        pricingApi: "/api/v1/pricing/ip-addresses/calculator/",
        component: r,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="ip-addresses" viewBox="0.5 0.5 50 50"> <path fill="#59B4D9" d="M0.5,45.127c0,1.108,0.898,2.007,2.007,2.007h45.986c1.109,0,2.007-0.899,2.007-2.007V13.798h-50V45.127z"/> <path fill="#A0A1A2" d="M48.493,4.5H2.507C1.398,4.5,0.5,5.398,0.5,6.507v10.627h50V6.507C50.5,5.398,49.601,4.5,48.493,4.5"/> <path opacity="0.2" fill="#FFFFFF" d="M2.514,4.5c-1.108,0-2.007,0.898-2.007,2.007v7.291v3.336v27.993 c0,1.108,0.899,2.007,2.007,2.007h2.188L44.12,4.5H2.514z"/> <rect x="13.357" y="9.279" fill="#FFFFFF" width="33.671" height="3.942"/> <path fill="#59B4D9" d="M11.81,11.183c0,2.693-2.184,4.878-4.878,4.878c-2.694,0-4.878-2.185-4.878-4.878 c0-2.694,2.184-4.879,4.878-4.879C9.625,6.304,11.81,8.489,11.81,11.183"/> <polygon fill="#FFFFFF" points="6.416,11.732 8.629,14.068 7.428,14.068 4.469,11.25 7.417,8.432 8.615,8.432 6.416,10.754  11.809,10.754 11.809,11.732 "/> <path fill="#FFFFFF" d="M17.926,36.576c0,0.57-0.203,1.037-0.609,1.4s-0.941,0.545-1.605,0.545c-0.594,0-1.098-0.186-1.512-0.557 s-0.621-0.834-0.621-1.389c0-0.563,0.207-1.023,0.621-1.383s0.938-0.539,1.57-0.539c0.609,0,1.121,0.184,1.535,0.551 S17.926,36.029,17.926,36.576z"/> <path fill="#FFFFFF" d="M26.83,36.576c0,0.57-0.203,1.037-0.609,1.4s-0.941,0.545-1.605,0.545c-0.594,0-1.098-0.186-1.512-0.557 s-0.621-0.834-0.621-1.389c0-0.563,0.207-1.023,0.621-1.383s0.938-0.539,1.57-0.539c0.609,0,1.121,0.184,1.535,0.551 S26.83,36.029,26.83,36.576z"/> <path fill="#FFFFFF" d="M35.733,36.576c0,0.57-0.203,1.037-0.609,1.4s-0.941,0.545-1.605,0.545c-0.594,0-1.098-0.186-1.512-0.557 s-0.621-0.834-0.621-1.389c0-0.563,0.207-1.023,0.621-1.383s0.938-0.539,1.57-0.539c0.609,0,1.121,0.184,1.535,0.551 S35.733,36.029,35.733,36.576z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#ip-addresses"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                type: "classic",
                instance: 0,
                instanceHours: 744,
                instanceHoursFactor: "1",
                loadBalanced: 0,
                loadBalancedHours: 744,
                loadBalancedHoursFactor: "1",
                reserved: 0,
                reservedHours: 744,
                reservedHoursFactor: "1",
                remaps: 0,
                "public": 0,
                publicHours: 744,
                publicHoursFactor: "1"
            }
        },
        getPrice: function (i) {
            return t.getPricingApiStore().data ? i.type === "classic" ? n(i).instance + n(i).loadBalanced + n(i).reserved + n(i).remaps : u(i) : 0
        },
        getDisplayName: function (n) {
            return n.name || i
        },
        getSku: function (n) {
            var i = t.getPricingApiStore().data,
                r = {};
            return i ? (n.type === "classic" ? (r.instance = i.classicOffers[n.region + "-instancepublic"].sku, r.loadBalanced = i.classicOffers[n.region + "-loadbalanced"].sku, r.reserved = i.classicOffers[n.region + "-reservation"].sku, r.remaps = i.classicOffers[n.region + "-remap"].sku) : r.armInstance = i.armOffers[n.region + "-instancepublic"].sku, r) : undefined
        },
        getDescription: function (n) {
            return n.type === "classic" ? Core.Util.FormatString("{0} type, {1} instance-level IP Address(es) x {2} {3}, {4} load balanced IP Address(es) x {5} {6}, {7} reserved IP Address(es) x {8} {9}, {10} IP Address remap(s)", n.type, n.instance, n.instanceHours, factorLabel(n.instanceHoursFactor), n.loadBalanced, n.loadBalancedHours, factorLabel(n.loadBalancedHoursFactor), n.reserved, n.reservedHours, factorLabel(n.reservedHoursFactor), n.remaps) : n.type === "arm" ? Core.Util.FormatString("{0} type, {1} public IP Address(es) x {2} {3}", n.type, n["public"], n.publicHours, factorLabel(n.publicHoursFactor)) : void 0
        },
        isValidOffer: function (n) {
            var i = t.getPricingApiStore().data;
            return i ? i.classicOffers[n.region + "-instancepublic"] != undefined : !1
        },
        willUpdate: function (n, t) {
            return n.instanceHoursFactor !== t.instanceHoursFactor && (t.instanceHours = factorInput(n.instanceHoursFactor, t.instanceHoursFactor, n.instanceHours)), n.loadBalancedHoursFactor !== t.loadBalancedHoursFactor && (t.loadBalancedHours = factorInput(n.loadBalancedHoursFactor, t.loadBalancedHoursFactor, n.loadBalancedHours)), n.reservedHoursFactor !== t.reservedHoursFactor && (t.reservedHours = factorInput(n.reservedHoursFactor, t.reservedHoursFactor, n.reservedHours)), n.publicHoursFactor !== t.publicHoursFactor && (t.publicHours = factorInput(n.publicHoursFactor, t.publicHoursFactor, n.publicHours)), t
        }
    });
    Acom.Calculator.Actions.modules.register(t)
}();
! function () {
    "use strict";

    function i(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            standardOperations: i.offers["secretssoftwareprotectedkeys-standard"].prices[t.region],
            renewals: i.offers["certificaterenewals-standard"].prices[t.region],
            keys: i.offers["hsmprotectedkeys-premium"].prices[t.region]
        } : undefined
    }

    function u(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.offers["secretssoftwareprotectedkeys-standard"].prices[t.region] * Math.ceil(t.operations / 1e4) : undefined
    }

    function f(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.offers["certificaterenewals-standard"].prices[t.region] * t.renewals : undefined
    }

    function e(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.offers["hsmprotectedkeys-premium"].prices[t.region] * t.keys : undefined
    }
    var t = "Key Vault",
        r, n;
    r = React.createClass({
        displayName: "KeyVault",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var n = this.props,
                r = n.dataStore.pricingData;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: n.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: n.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: r.regions,
                defaultValue: n.region,
                onChange: this.onChange
            }))), React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("h3", null, "Operations (Standard or Premium)", React.createElement(Tooltip, {
                style: {
                    top: "5px"
                }
            }, formatReact("Includes operations on:<ul><li>Secrets and Software-protected keys<\/li><li>Certificates (except renewals; those are included below)<\/li><\/ul>"))), React.createElement(TextNumber, {
                label: "Operations per month",
                name: "operations",
                min: "0",
                max: "50000000",
                defaultValue: n.operations,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per 10,000 operations",
                value: React.createElement(Acom.Atoms.Number, {
                    value: i(n).standardOperations,
                    decimals: "3",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u(n),
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.standardOperations, React.createElement("div", {
                className: "sku-under-total center"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.standardOperations))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h3", null, "Certificate Renewals (Standard or Premium)"), React.createElement(TextNumber, {
                label: "Renewals per month",
                name: "renewals",
                min: "0",
                max: "50000000",
                defaultValue: n.renewals,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per renewal",
                value: React.createElement(Acom.Atoms.Number, {
                    value: i(n).renewals,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f(n),
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.renewals, React.createElement("div", {
                className: "sku-under-total center"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.renewals))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h3", null, "Hardware Security Module Protected Keys (Premium only)"), React.createElement(TextNumber, {
                label: "HSM Protected Keys per month",
                name: "keys",
                min: "0",
                max: "50000000",
                defaultValue: n.keys,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per key",
                value: React.createElement(Acom.Atoms.Number, {
                    value: i(n).keys,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: e(n),
                decimals: "2",
                format: "currency"
            }))), displayIf(n.displaySku && n.sku.premiumKeys, React.createElement("div", {
                className: "sku-under-total center"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, n.sku.premiumKeys))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n.price,
                decimals: "2",
                format: "currency"
            }))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "key-vault",
        displayName: t,
        description: "Safeguard and maintain control of keys and other secrets",
        pricingApi: "/api/v1/pricing/key-vault/calculator/",
        component: r,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="key-vault" viewBox="0 0 50 50"> <path fill="#7FBA00" d="M47.4,27.6c0-7.3-3.5-13.7-8.8-17.8c0,0.2,0,0.5,0,0.7c0,2.2-0.6,4.3-1.5,6.1c2.6,2.9,4.2,6.7,4.2,10.9 c0,9-7.3,16.3-16.3,16.3S8.7,36.5,8.7,27.5c0-4.5,1.8-8.5,4.7-11.5c-0.8-1.7-1.3-3.6-1.3-5.6c0-0.4,0-0.9,0.1-1.3 c-5.8,4-9.6,10.8-9.6,18.4C2.6,40,12.6,50,25,50S47.4,40,47.4,27.6z"/> <path fill="#FCD116" d="M25.3,0C19.6,0,15,4.6,15,10.3c0,4.7,3.1,8.6,7.4,9.9v10.2h-4.8v5.2h4.8v3.8h5.7V20.1 c4.3-1.2,7.4-5.2,7.4-9.9C35.6,4.6,31,0,25.3,0z M25.3,5.4c2.7,0,4.9,2.2,4.9,4.9s-2.2,4.9-4.9,4.9s-4.9-2.2-4.9-4.9 S22.6,5.4,25.3,5.4z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#key-vault"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                operations: 0,
                renewals: 0,
                keys: 0
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? u(t) + e(t) + f(t) : 0
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getDescription: function (n) {
            return formatString("{0} operations, {1} certificate renewals, {2} HSM keys in the {3} region", n.operations, n.renewals, n.keys, n.region)
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? {
                standardOperations: i.offers["secretssoftwareprotectedkeys-standard"].skus[t.region],
                renewals: i.offers["certificaterenewals-standard"].skus[t.region],
                premiumKeys: i.offers["hsmprotectedkeys-premium"].skus[t.region]
            } : ""
        },
        isValidOffer: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers["secretssoftwareprotectedkeys-standard"].prices[t.region] >= 0 : !1
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function u(t) {
        var i = n.getPricingApiStore().data,
            f = t.tier === "free" ? "500MB" : "None",
            u, r;
        if (!i) return undefined;
        for (r = 0; r < i.tiers.length; r++) i.tiers[r].slug === t.tier && (u = i.tiers[r].displayName);
        return React.createElement("div", null, formatReact("{0} pricing tier: Daily limit: {1} - {2}/GB", u, f, React.createElement(Acom.Atoms.Number, {
            value: i.offers[t.tier].prices[t.region],
            decimals: "2",
            format: "currency"
        })))
    }

    function r(t) {
        var i = n.getPricingApiStore().data;
        return i ? i.offers[t.tier].prices[t.region] : undefined
    }
    var t = "Log Analytics",
        i, n;
    i = React.createClass({
        displayName: "LogAnalytics",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var i = this.props,
                f = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: i.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: t,
                defaultValue: i.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: f.regions,
                defaultValue: i.region
            }), React.createElement(CalculatorDropdown, {
                label: "Tier",
                name: "tier",
                options: f.tiers,
                defaultValue: i.tier
            })), u(i)), displayIf(i.tier !== "free", React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "GB",
                name: "gbs",
                min: "1",
                max: "9999",
                defaultValue: i.gbs,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per GB",
                value: React.createElement(Acom.Atoms.Number, {
                    value: r(i),
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(i.displaySku && i.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, i.sku)))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "log-analytics",
        displayName: t,
        description: "Collect, search and visualize machine data from on-premises and cloud",
        pricingApi: "/api/v1/pricing/log-analytics/calculator/",
        component: i,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="log-analytics" viewBox="-1 -1 34 34"> <path fill="#0072c6" fill-rule="evenodd" clip-rule="evenodd" d="M4,19h2v-2l-2,0V19z M4,13h2v-1.8c-0.7,0.4-1.4,0.8-2,1.3V13z M7,25h2v-2l-2,0V25z M7,31h2v-2l-2,0V31z M7,22h2v-2l-2,0V22z M7,28h2v-2l-2,0V28z M4,25h2v-2l-2,0V25z M4,28h2v-2l-2,0V28z M1,22h2v-2l-2,0V22z M1,25h2v-2l-2,0V25z M1,19h2v-2l-2,0V19z M1.2,16H3v-2l-0.5,0C2,14.6,1.6,15.3,1.2,16z M4,29.5 c0.6,0.5,1.3,0.9,2,1.3V29l-2,0V29.5z M4,16h2v-2l-2,0V16z M19,28h0.5c0.5-0.6,0.9-1.3,1.3-2L19,26V28z M16,25h2v-2l-2,0V25z M16,30.8c0.7-0.4,1.4-0.8,2-1.3V29l-2,0V30.8z M16,28h2v-2l-2,0V28z M7,19h2v-2l-2,0V19z M20.5,1C14.7,1,10,5.7,10,11.5 c0,3.1,0,10.5,0,10.5s7.8,0,10.5,0C26.3,22,31,17.3,31,11.5S26.3,1,20.5,1z M17,16h-2v-6h2V16z M21,16h-2v-4h2V16z M25,16h-2V8h2 V16z M19,25h2v-2l-2,0V25z M7,13h2v-2l-2,0V13z M13,28h2v-2l-2,0V28z M10,28h2v-2l-2,0V28z M10,25h2v-2l-2,0V25z M13,31h2v-2l-2,0 V31z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#log-analytics"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-east",
                tier: "free",
                gbs: 1
            }
        },
        getPrice: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? t.gbs * r(t) : undefined
        },
        getDisplayName: function (n) {
            return n.name || t
        },
        getDescription: function (n) {
            return n.tier === "free" ? Core.Util.FormatString("{0} tier", n.tier) : Core.Util.FormatString("{0} GB(s), {1} tier", n.gbs, n.tier)
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? i.offers[t.tier].skus[t.region] : undefined
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function f(t) {
        var i = n.getPricingApiStore().data;
        return i ? getGraduatedPrice(i.graduatedOffers.actions[t.region].prices, t.actions * t.days) : 0
    }

    function t(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            integrationAccounts: i.offers["integration-permonth"].prices[t.region],
            enterpriseConnections: i.offers["enterprise-permonth"].prices[t.region],
            testEnterpriseConnections: i.offers["test-permonth"].prices[t.region]
        } : 0
    }

    function i(i) {
        var r = n.getPricingApiStore().data;
        return r ? {
            integrationAccounts: t(i).integrationAccounts * i.integrationAccounts,
            enterpriseConnections: t(i).enterpriseConnections * i.enterpriseConnections,
            testEnterpriseConnections: t(i).testEnterpriseConnections * i.testEnterpriseConnections
        } : 0
    }
    var r = "Logic Apps",
        u, n;
    u = React.createClass({
        displayName: "LogicApps",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var u = this.props,
                e = n.getPricingApiStore().data;
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: u.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: r,
                defaultValue: u.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: e.regions,
                defaultValue: u.region
            }))), React.createElement("div", {
                className: "cost"
            }, React.createElement(TextNumber, {
                label: "Action executions",
                name: "actions",
                min: "0",
                max: "999999999",
                defaultValue: u.actions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(TextNumber, {
                label: "Days",
                name: "days",
                min: "0",
                max: "31",
                defaultValue: u.days,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f(u),
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.actions, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, u.sku.actions))))), React.createElement("div", {
                className: "service-properties collapsible"
            }, React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Enterprise Integration Pack"), React.createElement(TextNumber, {
                label: "Integration accounts",
                name: "integrationAccounts",
                min: "0",
                max: "9999",
                defaultValue: u.integrationAccounts,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per account",
                value: React.createElement(Acom.Atoms.Number, {
                    value: t(u).integrationAccounts,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(u).integrationAccounts,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.integrationAccounts, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, u.sku.integrationAccounts))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "Enterprise connections",
                name: "enterpriseConnections",
                min: "0",
                max: "9999",
                defaultValue: u.enterpriseConnections,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per connection",
                value: React.createElement(Acom.Atoms.Number, {
                    value: t(u).enterpriseConnections,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(u).enterpriseConnections,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.enterpriseConnections, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, u.sku.enterpriseConnections))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "Test enterprise connections",
                name: "testEnterpriseConnections",
                min: "0",
                max: "9999",
                defaultValue: u.testEnterpriseConnections,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per connection",
                value: React.createElement(Acom.Atoms.Number, {
                    value: t(u).testEnterpriseConnections,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: i(u).testEnterpriseConnections,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku && u.sku.testEnterpriseConnections, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, u.sku.testEnterpriseConnections)))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: u.price,
                decimals: "2",
                format: "currency"
            }))), displayIf(u.displaySku && u.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, u.sku.testEnterpriseConnections))))))
        }
    });
    n = Acom.Calculator.createModule({
        slug: "logic-apps",
        displayName: r,
        description: "Automate the access and use of data across clouds without writing code",
        pricingApi: "/api/v1/pricing/logic-apps/calculator/",
        component: u,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="logic-apps" viewBox="0 0 50 38.8"> <path d="M26,21.3v-5H23.5v5c0,.9-.8,1.7-2.1,2.1l-3.4.7c-2.3.7-3.9,2.5-3.9,4.5v5.7h2.5V28.6c0-.9.8-1.7,2.1-2.1l3.4-.8A4.833,4.833,0,0,0,26,21.3Z" transform="translate(0 -5.6)" fill="#59b4d9"/> <path d="M19.6,36.9V32.3a2.006,2.006,0,0,0-2-2H13a2.006,2.006,0,0,0-2,2v4.6a2.006,2.006,0,0,0,2,2h4.6A2.006,2.006,0,0,0,19.6,36.9Z" transform="translate(0 -5.6)" fill="#7fba00"/> <path d="M23.2,21.3v-5h2.5v5c0,.9.8,1.7,2.1,2.1l4.2.9c2.3.7,3.9,2.5,3.9,4.5v5.7H33.4V28.8c0-.9-.8-1.7-2.1-2.1l-4.2-.9C24.8,25.1,23.2,23.3,23.2,21.3Z" transform="translate(0 -5.6)" fill="#59b4d9"/> <path d="M30.4,37.1V32.5a2.006,2.006,0,0,1,2-2H37a2.006,2.006,0,0,1,2,2v4.6a2.006,2.006,0,0,1-2,2H32.4A2.006,2.006,0,0,1,30.4,37.1Z" transform="translate(0 -5.6)" fill="#7fba00"/> <rect x="23.2" y="10.7" width="2.8" height="4.8" fill="#59b4d9"/> <path d="M26.5,11.7v3.7H22.8V11.7h3.7m.8-2.8H22a2.006,2.006,0,0,0-2,2v5.3a2.006,2.006,0,0,0,2,2h5.3a2.006,2.006,0,0,0,2-2V10.9a2.006,2.006,0,0,0-2-2Z" transform="translate(0 -5.6)" fill="#0072c6"/> <path d="M7.9,44.4a7.41,7.41,0,0,1-4.5-1.1c-.9-.8-1.3-2.1-1.3-4V28.9c0-1.7-.7-2.6-2.1-2.6V23.7q2.1,0,2.1-2.7V10.8c0-1.9.4-3.3,1.3-4.1S5.8,5.6,7.9,5.6V8.2c-1.5,0-2.3.8-2.3,2.5v10c0,2.3-.7,3.7-2.2,4.3h0c1.4.6,2.2,2,2.2,4.3v9.9a3.439,3.439,0,0,0,.5,2,2.2,2.2,0,0,0,1.7.6l.1,2.6Z" transform="translate(0 -5.6)" fill="#59b4d9"/> <path d="M42.1,5.6a7.41,7.41,0,0,1,4.5,1.1c.9.8,1.3,2.1,1.3,4V21.1c0,1.7.7,2.6,2.1,2.6v2.6q-2.1,0-2.1,2.7V39.1c0,1.9-.4,3.3-1.3,4.1s-2.4,1.2-4.5,1.2V41.8c1.5,0,2.3-.8,2.3-2.5v-10c0-2.3.7-3.7,2.2-4.3h0c-1.4-.6-2.2-2-2.2-4.3V10.8a3.439,3.439,0,0,0-.5-2,2.2,2.2,0,0,0-1.7-.6l-.1-2.6Z" transform="translate(0 -5.6)" fill="#59b4d9"/> <\/symbol><\/defs><\/svg><svg><use xlink:href="#logic-apps"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-west",
                actions: 0,
                days: 1,
                integrationAccounts: 0,
                enterpriseConnections: 0,
                testEnterpriseConnections: 0
            }
        },
        getPrice: function (t) {
            var r = n.getPricingApiStore().data;
            return r ? f(t) + i(t).integrationAccounts + i(t).enterpriseConnections + i(t).testEnterpriseConnections : 0
        },
        getDisplayName: function (n) {
            return n.name || r
        },
        getSku: function (t) {
            var i = n.getPricingApiStore().data;
            return i ? {
                actions: i.graduatedOffers.actions[t.region].sku,
                integrationAccounts: i.offers["integration-permonth"].skus[t.region],
                enterpriseConnections: i.offers["enterprise-permonth"].skus[t.region],
                testEnterpriseConnections: i.offers["test-permonth"].skus[t.region]
            } : ""
        },
        getDescription: function (n) {
            return Core.Util.FormatString("{0} region, {1} actions, {2} days, {3} integration accounts, {4} enterprise connections and {5} test enterprise connections.", n.region, n.actions, n.days, n.integrationAccounts, n.enterpriseConnections, n.testEnterpriseConnections)
        }
    });
    Acom.Calculator.Actions.modules.register(n)
}();
! function () {
    "use strict";

    function n(n) {
        var i = t.getPricingApiStore().data;
        return i ? {
            studioSeats: n.studioSeats * i.offers["standard-studio-perseatpermonth"].prices[n.region],
            studioHours: n.studioHours * n.studioSeats * i.offers["standard-studio-perstudioexperimentationhour"].prices[n.region],
            webApiTransactions: n.webApiTier == "devtest" ? 0 : Math.ceil(n.webApiTransactions / 1e3) * i.offers["web-api-" + n.webApiTier + "-perthousandapitransactions"].prices[n.region],
            webApiHours: n.webApiTier == "devtest" ? 0 : n.webApiHours * i.offers["web-api-" + n.webApiTier + "-perhour"].prices[n.region],
            webApiClassicTransactions: Math.ceil(n.webApiClassicTransactions / 1e3) * i.offers["web-api-classic-standard-perthousandapitransactions"].prices[n.region],
            webApiClassicHours: n.webApiClassicHours * i.offers["web-api-classic-standard-perhour"].prices[n.region]
        } : 0
    }

    function u(n) {
        var r = t.getPricingApiStore().data,
            i = 0;
        if (!r) return "";
        for (i; i < r.webApiTiers.length; i++)
            if (r.webApiTiers[i].slug === n.webApiTier) return r.webApiTiers[i].displayName
    }
    var i = "Machine Learning",
        r, t;
    r = React.createClass({
        displayName: "MachineLearning",
        onChange: Acom.Calculator.onChange,
        render: function () {
            var t = this.props,
                r = t.dataStore.pricingData,
                f = t.webApiTier == "devtest" ? 0 : r.offers["web-api-" + t.webApiTier + "-perthousandapitransactions"].prices[t.region],
                e = t.webApiTier == "devtest" ? 0 : r.offers["web-api-" + t.webApiTier + "-perhour"].prices[t.region];
            return React.createElement("div", {
                onChange: this.onChange
            }, React.createElement("div", {
                className: "heading"
            }, React.createElement("span", {
                className: "service-logo icon",
                dangerouslySetInnerHTML: t.dataStore.module.icon
            }), " ", React.createElement("input", {
                className: "text-input",
                name: "name",
                placeholder: i,
                defaultValue: t.name
            })), React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Region",
                name: "region",
                options: r.regions,
                defaultValue: t.region
            }), React.createElement(CalculatorDropdown, {
                label: "Feature",
                name: "feature",
                options: r.categories,
                defaultValue: t.feature
            })), displayIf(t.feature === "studio" && t.region !== "us-east-2", React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                key: t.feature + "studio",
                label: "Tier",
                name: "studioTier",
                options: r.studioTiers,
                defaultValue: t.studioTier
            }))), displayIf(t.feature === "webapi", React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                key: t.feature + "api",
                label: "Tier",
                name: "webApiTier",
                options: r.webApiTiers,
                defaultValue: t.webApiTier
            }))), displayIf(t.feature === "webapiclassic", React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                key: t.feature + "classic",
                label: "Tier",
                name: "webApiClassicTier",
                options: r.webApiClassicTiers,
                defaultValue: t.webApiClassicTier
            })))), displayIf(t.feature === "studio" && t.studioTier === "free" && t.region !== "us-east-2", React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("p", null, "The free tier is intended to provide an in-depth introduction to the Azure Machine Learning Studio. The free tier includes free access to one Azure Machine Learning Studio workspace per Microsoft account. It includes the ability to use up to 10GB of storage and the ability to operationalize models as staging APIs.")), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            }))))))), displayIf(t.feature === "studio" && t.studioTier === "standard" && t.region !== "us-east-2", React.createElement("div", null, React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Seats"), React.createElement(TextNumber, {
                label: "Seats",
                name: "studioSeats",
                min: "0",
                max: "999",
                defaultValue: t.studioSeats,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r.offers["standard-studio-perseatpermonth"].prices[t.region],
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per month")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t).studioSeats,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.studioSeats))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Studio usage"), React.createElement(TextNumber, {
                label: "Experiment hours per seat",
                name: "studioHours",
                min: "0",
                max: "9999",
                defaultValue: t.studioHours,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric static"
            }, t.studioSeats), React.createElement("label", {
                className: "label"
            }, "Seats")), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r.offers["standard-studio-perstudioexperimentationhour"].prices[t.region],
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per month")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t).studioHours,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.studioHours))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            }))))))), displayIf(t.region === "us-east-2" && t.feature === "studio", React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("p", null, "The Studio feature is not currently available in the East US 2 region.")), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            }))))))), displayIf(t.feature === "webapi", React.createElement("div", null, displayIf(t.webApiTier === "devtest", React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("p", null, formatReact("For testing only: includes {0} API transactions and {1} API compute hours.", r.offers["web-api-devtest-permonth"].transactionsIncluded.toLocaleString(Acom.currentCulture), r.offers["web-api-devtest-permonth"].computeHoursIncluded.toLocaleString(Acom.currentCulture)))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            })))))), React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("p", null, formatReact("Includes {0} API transactions and {1} API compute hours.", r.offers["web-api-" + t.webApiTier + "-permonth"].transactionsIncluded.toLocaleString(Acom.currentCulture), r.offers["web-api-" + t.webApiTier + "-permonth"].computeHoursIncluded.toLocaleString(Acom.currentCulture)))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", null, React.createElement("p", {
                className: "inline-cost-text"
            }, formatReact("{0} base price", u(t)))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r.offers["web-api-" + t.webApiTier + "-permonth"].prices[t.region],
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.webApiBase))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "Transaction overages",
                name: "webApiTransactions",
                min: "0",
                max: "999999999",
                defaultValue: t.webApiTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per 1,000")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t).webApiTransactions,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.webApiTransactions))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "Compute hour overages",
                name: "webApiHours",
                min: "0",
                max: "999999999",
                defaultValue: t.webApiHours,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: e,
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per hour")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t).webApiHours,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.webApiHours))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            }))))))))), displayIf(t.feature === "webapiclassic", React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement(TextNumber, {
                label: "Transactions",
                name: "webApiClassicTransactions",
                min: "0",
                max: "999999999",
                defaultValue: t.webApiClassicTransactions,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r.offers["web-api-classic-standard-perthousandapitransactions"].prices[t.region],
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per 1,000")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t).webApiClassicTransactions,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.webApiClassicTransactions))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement(TextNumber, {
                label: "Compute hours",
                name: "webApiClassicHours",
                min: "0",
                max: "999999999",
                defaultValue: t.webApiClassicHours,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "2px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r.offers["web-api-classic-standard-perhour"].prices[t.region],
                decimals: "2",
                format: "currency"
            })), React.createElement("label", {
                className: "label"
            }, "Per hour")), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: n(t).webApiClassicHours,
                decimals: "2",
                format: "currency"
            }))), displayIf(t.displaySku && t.sku, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, t.sku.webApiClassicHours))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t.price,
                decimals: "2",
                format: "currency"
            }))))))))
        }
    });
    t = Acom.Calculator.createModule({
        slug: "machine-learning",
        displayName: i,
        description: "Easily build, deploy, and manage predictive analytics solutions",
        pricingApi: "/api/v1/pricing/machine-learning/calculator/",
        component: r,
        icon: {
            __html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="machine-learning" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M48.288,44.623L32.72,17.659V6.743h0.281c1.862,0,3.372-1.51,3.372-3.372S34.863,0,33.001,0H16.016 c-1.862,0-3.372,1.51-3.372,3.372s1.51,3.372,3.372,3.372h0.281v10.915L0.729,44.623C-0.979,47.58,0.418,50,3.833,50h41.351 C48.598,50,49.995,47.58,48.288,44.623z"/> <polygon fill="#B8D432" points="13.551,33.017 7.127,44.143 41.889,44.143 35.466,33.017 "/> <path fill="#7FBA00" d="M25.334,37.532c1.735,0,3.141-1.406,3.141-3.141c0-0.493-0.117-0.958-0.32-1.374h-5.643 c-0.203,0.415-0.32,0.88-0.32,1.374C22.193,36.126,23.599,37.532,25.334,37.532z"/> <circle fill="#7FBA00" cx="29.232" cy="39.956" r="1.541"/> <path opacity="0.25" fill="#FFFFFF" d="M0.729,44.623l15.568-26.965V6.743h-0.281c-1.862,0-3.372-1.51-3.372-3.372 S14.153,0,16.016,0l7.319,0v17.572L15.13,50H3.833C0.418,50-0.979,47.58,0.729,44.623z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#machine-learning"><\/use><\/svg>'
        },
        getInitialState: function () {
            return {
                region: "us-south-central",
                feature: "studio",
                studioTier: "free",
                studioHours: 0,
                studioSeats: 0,
                webApiTier: "devtest",
                webApiTransactions: 0,
                webApiHours: 0,
                webApiClassicTier: "standard",
                webApiClassicTransactions: 0,
                webApiClassicHours: 0
            }
        },
        getPrice: function (i) {
            var r = t.getPricingApiStore().data;
            if (!r) return 0;
            if (i.feature === "studio") {
                if (i.studioTier === "free" || i.region === "us-east-2") return 0;
                if (i.studioTier === "standard") return n(i).studioSeats + n(i).studioHours
            } else {
                if (i.feature === "webapi") return i.webApiTier === "devtest" ? r.offers["web-api-devtest-permonth"].prices[i.region] : r.offers["web-api-" + i.webApiTier + "-permonth"].prices[i.region] + n(i).webApiTransactions + n(i).webApiHours;
                if (i.feature === "webapiclassic") return n(i).webApiClassicTransactions + n(i).webApiClassicHours
            }
        },
        getDisplayName: function (n) {
            return n.name || i
        },
        getSku: function (n) {
            var i = t.getPricingApiStore().data;
            return i ? {
                studioHours: i.offers["standard-studio-perstudioexperimentationhour"].skus[n.region],
                studioSeats: i.offers["standard-studio-perseatpermonth"].skus[n.region],
                webApiBase: i.offers["web-api-" + n.webApiTier + "-permonth"].skus[n.region],
                webApiTransactions: n.webApiTier == "devtest" ? "" : i.offers["web-api-" + n.webApiTier + "-perthousandapitransactions"].skus[n.region],
                webApiHours: n.webApiTier == "devtest" ? "" : i.offers["web-api-" + n.webApiTier + "-perhour"].skus[n.region],
                webApiClassicTransactions: i.offers["web-api-classic-standard-perthousandapitransactions"].skus[n.region],
                webApiClassicHours: i.offers["web-api-classic-standard-perhour"].skus[n.region]
            } : ""
        },
        getDescription: function (n) {
            return n.feature === "studio" && n.studioTier === "free" ? "Free" : n.feature === "webapi" && n.webApiTier === "devtest" ? "Free" : n.feature === "studio" ? Core.Util.FormatString("{0} studio seats, {1} experiment hours per seat.", n.studioSeats, n.studioHours) : n.feature === "webapi" ? Core.Util.FormatString("{0} tier, {1} overage transactions, {2} overage hours", n.webApiTier, n.webApiTransactions, n.webApiHours) : Core.Util.FormatString("{0} transactions, {1} hours", n.webApiClassicTransactions, n.webApiClassicHours)
        }
    });
    Acom.Calculator.Actions.modules.register(t)
}();
! function () {
    "use strict";

    function o(t) {
        var i = n.getPricingApiStore().data,
            r = t.encoderType.replace("encoder", "") + "-encoder",
            u = 0,
            f = 0,
            e = 0;
        return i ? (f = t.output * t.outputFactor, u = i.vod.offers[r].price[t.region], e = f * i.vod.offers[r][t.outputQuality + "Multiplier"] * u, t.addAudio ? e + f * i.vod.offers[r].audioMultiplier * u : e) : 0
    }

    function s(t) {
        var i = n.getPricingApiStore().data;
        return i ? getGraduatedPrice(i.vod.indexingOffers[t.region].prices, t.indexing) : 0
    }

    function i(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            s1: i.vod.offers["reserved-units-s1"].price[t.region],
            s2: i.vod.offers["reserved-units-s2"].price[t.region],
            s3: i.vod.offers["reserved-units-s3"].price[t.region]
        } : 0
    }

    function r(t) {
        var r = n.getPricingApiStore().data;
        return r ? {
            s1: i(t).s1 * t.s1Hours,
            s2: i(t).s2 * t.s2Hours,
            s3: i(t).s3 * t.s3Hours
        } : 0
    }

    function h(t) {
        var i = n.getPricingApiStore().data;
        return i ? t.streamingTier === "standardstreamingunits" ? i.streaming.offers["standard-streaming-units"].price[t.region] * t.standardStreamingUnits : t.streamingTier === "premiumstreamingunits" ? i.streaming.offers["premium-streaming-units"].price[t.region] * t.premiumStreamingUnits : 0 : 0
    }

    function t(t) {
        var i = n.getPricingApiStore().data;
        return i ? {
            aes: i.contentProtection.offers.advancedencryption.price[t.region] * t.contentProtectionProtectionAES,
            playReady: i.contentProtection.offers.playready.price[t.region] * t.contentProtectionProtectionPlayReady,
            widevine: i.contentProtection.offers.widevine.price[t.region] * t.contentProtectionWidevine,
            fairplay: i.contentProtection.offers.fairplay.price[t.region] * t.contentProtectionFairplay
        } : 0
    }

    function u(n, t) {
        return getGraduatedPrice(n, t)
    }
    var f = "Media Services",
        e, n;
    e = React.createClass({
        displayName: "MediaServices",
        onChange: Acom.Calculator.onChange,
        getServiceSecondaryProperty: function (n) {
            var t = this.props,
                i = t.dataStore.pricingData;
            return n === "vod" ? React.createElement("div", null, React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Encoder type",
                name: "encoderType",
                options: i[n].tiers,
                defaultValue: t.encoderType
            }), React.createElement(CalculatorDropdown, {
                label: "Video output quality",
                name: "outputQuality",
                options: i[n].outputQualities,
                defaultValue: t.outputQuality
            }), displayIf(t.outputQuality !== "audio", React.createElement("div", null, React.createElement(Checkbox, {
                label: "Add audio",
                name: "addAudio",
                defaultChecked: t.addAudio
            })))))) : n === "streaming" ? React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Streaming tier",
                name: "streamingTier",
                options: i[n].types,
                defaultValue: t.streamingTier
            })), React.createElement("span", null, formatReact('<strong>NOTE:<\/strong><br />When Azure CDN is not enabled for Media Services, data transfer is charged at <a href="{0}">Data Transfer Pricing<\/a>. When Azure CDN is enabled for Streaming Units, data transfer charges do not apply. Data transferred is instead just charged at <a href="{1}">standard CDN pricing<\/a>.', "/en-us/pricing/details/bandwidth/", "/en-us/pricing/details/cdn/"))) : n === "livevideo" ? React.createElement("div", {
                className: "detail"
            }, React.createElement("div", {
                className: "wa-dropdownList"
            }, React.createElement(CalculatorDropdown, {
                label: "Live channel type",
                name: "liveVideoType",
                options: i.liveVideo.types,
                defaultValue: t.liveVideoType
            }))) : void 0
        },
        getServiceProperties: function (n) {
            var f = this.props,
                e = f.dataStore.pricingData;
            if (n === "vod") return React.createElement("div", {
                className: "service-properties collapsible"
            }, React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Output Minutes"), React.createElement(FactoredInput, {
                key: "factor-outputFactor-" + f.outputFactor,
                name: "output",
                defaultValue: f.output,
                factorsName: "outputFactor",
                factorsDefault: f.outputFactor || "1",
                factorUnit: "minutes",
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: o(f),
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku.encoder, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku.encoder))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Indexing"), React.createElement(TextNumber, {
                label: "Content minutes",
                name: "indexing",
                min: "0",
                max: "999999999",
                defaultValue: f.indexing,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: s(f),
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku.indexing, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku.indexing))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Media Reserved Units"), React.createElement("h4", null, "S1"), React.createElement(TextNumber, {
                label: "Hours",
                name: "s1Hours",
                min: "0",
                max: "999999999",
                defaultValue: f.s1Hours,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                value: React.createElement(Acom.Atoms.Number, {
                    value: i(f).s1,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(f).s1,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku.s1, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku.s1))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h4", null, "S2"), React.createElement(TextNumber, {
                label: "Hours",
                name: "s2Hours",
                min: "0",
                max: "999999999",
                defaultValue: f.s2Hours,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                value: React.createElement(Acom.Atoms.Number, {
                    value: i(f).s2,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(f).s2,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku.s2, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku.s2))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h4", null, "S3"), React.createElement(TextNumber, {
                label: "Hours",
                name: "s3Hours",
                min: "0",
                max: "999999999",
                defaultValue: f.s3Hours,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                value: React.createElement(Acom.Atoms.Number, {
                    value: i(f).s3,
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: r(f).s3,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku.s3, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku.s3))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.price,
                decimals: "2",
                format: "currency"
            }))))));
            if (n === "streaming") return React.createElement("div", null, React.createElement("div", {
                className: "cost no-divider"
            }, React.createElement("h3", null, "Streaming units"), displayIf(f.streamingTier === "standardstreamingunits", React.createElement(TextNumber, {
                label: "Units",
                name: "standardStreamingUnits",
                min: "0",
                max: "999",
                defaultValue: f.standardStreamingUnits,
                onChange: this.onChange
            })), displayIf(f.streamingTier === "premiumstreamingunits", React.createElement(TextNumber, {
                label: "Units",
                name: "premiumStreamingUnits",
                min: "0",
                max: "999",
                defaultValue: f.premiumStreamingUnits,
                onChange: this.onChange
            })), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement("div", {
                className: "wa-textNumber",
                style: {
                    marginTop: "5px",
                    marginBottom: "5px"
                }
            }, React.createElement("div", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: e[n].offers[f.streamingTier.replace("streamingunits", "-streaming-units")].price[f.region],
                decimals: "2",
                format: "currency"
            }))), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: h(f),
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku.streamingUnits, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku.streamingUnits))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.price,
                decimals: "2",
                format: "currency"
            }))))));
            if (n === "contentprotection") return React.createElement("div", null, React.createElement("div", {
                className: "cost"
            }, React.createElement("h3", null, "Advanced Encryption"), React.createElement(TextNumber, {
                label: "Units of 100 keys",
                name: "contentProtectionProtectionAES",
                min: "0",
                max: "999999",
                defaultValue: f.contentProtectionProtectionAES,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per 100 Keys",
                value: React.createElement(Acom.Atoms.Number, {
                    value: e.contentProtection.offers.advancedencryption.price[f.region],
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(f).aes,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku.protectionAdvancedEncryption, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku.protectionAdvancedEncryption))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h3", null, "PlayReady"), React.createElement(TextNumber, {
                key: f.service,
                label: "Units of 100 licenses",
                name: "contentProtectionProtectionPlayReady",
                min: "0",
                max: "999999",
                defaultValue: f.contentProtectionProtectionPlayReady,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per 100 Licenses",
                value: React.createElement(Acom.Atoms.Number, {
                    value: e.contentProtection.offers.playready.price[f.region],
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(f).playReady,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku.protectionPlayReady, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku.protectionPlayReady))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h3", null, "Widevine"), React.createElement(TextNumber, {
                label: "Units of 100 licenses",
                name: "contentProtectionWidevine",
                min: "0",
                max: "999999",
                defaultValue: f.contentProtectionWidevine,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per 100 Licenses",
                value: React.createElement(Acom.Atoms.Number, {
                    value: e.contentProtection.offers.playready.price[f.region],
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(f).widevine,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku.widevine, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku.widevine))))), React.createElement("div", {
                className: "cost sub-module"
            }, React.createElement("h3", null, "FairPlay"), React.createElement(TextNumber, {
                label: "Units of 100 licenses",
                name: "contentProtectionFairplay",
                min: "0",
                max: "999999999",
                defaultValue: f.contentProtectionFairplay,
                onChange: this.onChange
            }), React.createElement("div", {
                className: "math"
            }, "×"), React.createElement(StaticNumber, {
                label: "Per 100 Licenses",
                value: React.createElement(Acom.Atoms.Number, {
                    value: e.contentProtection.offers.fairplay.price[f.region],
                    decimals: "2",
                    format: "currency"
                })
            }), React.createElement("div", {
                className: "total"
            }, React.createElement("div", {
                className: "math equals"
            }, "="), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: t(f).fairplay,
                decimals: "2",
                format: "currency"
            }))), displayIf(f.displaySku && f.sku.fairplay, React.createElement("div", {
                className: "sku-under-total"
            }, React.createElement("label", {
                className: "sku-label"
            }, "SKU"), React.createElement("span", {
                className: "sku-number"
            }, f.sku.fairplay))))), React.createElement("div", {
                className: "cost"
            }, React.createElement("div", {
                className: "total"
            }, React.createElement("span", {
                className: "sub-total"
            }, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
                className: "numeric"
            }, React.createElement(Acom.Atoms.Number, {
                value: f.price,
                decimals: "2",
                format: "currency"
            }))))));
            if (n === "livevideo") {
                if (f.liveVideoType === "standardliveencoding") return React.createElement("div", {
                    key: "props.liveVideoWithEncodingHours",
                    className: "cost"
                }, React.createElement(TextNumber, {
                    label: "Hours",
                    name: "liveVideoWithEncodingHours",
                    min: "0",
                    max: "999",
                    defaultValue: f.liveVideoWithEncodingHours,
                    onChange: this.onChange
                }), React.createElement("div", {
                    className: "total"
                }, React.createElement("div", {
                    className: "math equals"
                }, "="), formatReact("{0}/mo", React.createElement("span", {
                    className: "numeric"
                }, React.createElement(Acom.Atoms.Number, {
                    value: u(e.liveVideo.offers[f.liveVideoType + "-" + f.region].prices, f.liveVideoWithEncodingHours),
                    decimals: "2",
                    format: "currency"
                }))), displayIf(f.displaySku && f.sku.liveVideo, React.createElement("div", {
                    className: "sku-under-total"
                }, React.createElement("label", {
                    className: "sku-label"
   
window._Acom = Acom;
Object.defineProperty(window, 'Acom', {
    get: function () {
        return window._Acom;
    },

    set: function (value) {
        debugger; // sets breakpoint
        window._Acom = value;
    }
});