403Webshell
Server IP : 85.158.181.41  /  Your IP : 216.73.217.12
Web Server : Apache
System : Linux cloud9-vm129 6.1.178+1-ph #ph SMP PREEMPT_DYNAMIC Wed Jul 29 09:00:54 UTC 2026 x86_64
User : moncbefd ( 1024)
PHP Version : 7.3.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/moncbefd/www.moneta.at/JSEngine/build/widgets/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/moncbefd/www.moneta.at/JSEngine/build/widgets/daterangepicker.js
'use strict';

/* --------------------------------------------------------------
 daterangepicker.js 2016-04-28
 Gambio GmbH
 http://www.gambio.de
 Copyright (c) 2016 Gambio GmbH
 Released under the GNU General Public License (Version 2)
 [http://www.gnu.org/licenses/gpl-2.0.html]
 --------------------------------------------------------------
 */

/**
 * Date Range Picker
 *
 * Creates an instance of the jQuery UI Daterangepicker widget which enables the user to select
 * a custom date range in the same datepicker, something that is not supported by jQuery UI.
 *
 * This widget requires the "general" translation section in order to translate the day
 * and month names.
 *
 * ### Options
 *
 * You can provide all the options of the following site as data attributes:
 *
 * {@link http://tamble.github.io/jquery-ui-daterangepicker/#options}
 *
 * ### Example
 *
 * ```html
 * <input type="text" data-jse-widget="daterangepicker" data-daterangepicker-date-format="dd.mm.yy" />
 * ```
 *
 * {@link https://github.com/tamble/jquery-ui-daterangepicker}
 *
 * @module JSE/Widgets/datarangepicker
 * @requires jQueryUI-Daterangepicker
 */
jse.widgets.module('daterangepicker', [jse.source + '/vendor/jquery-ui-dist/jquery-ui.min.css', jse.source + '/vendor/jquery-ui-dist/jquery-ui.min.js', jse.source + '/vendor/momentjs/moment.min.js', jse.source + '/vendor/jquery-ui-daterangepicker/jquery.comiseo.daterangepicker.min.css'], function (data) {

    'use strict';

    // ------------------------------------------------------------------------
    // VARIABLES
    // ------------------------------------------------------------------------

    /**
     * Escape Key Code
     *
     * @type {Number}
     */

    var ESC_KEY_CODE = 27;

    /**
     * Tab Key Code
     *
     * @type {Number}
     */
    var TAB_KEY_CODE = 9;

    /**
     * Module Selector
     *
     * @type {Object}
     */
    var $this = $(this);

    /**
     * Default Options
     *
     * @type {Object}
     */
    var defaults = {
        presetRanges: [],
        dateFormat: jse.core.config.get('languageCode') === 'de' ? 'dd.mm.yy' : 'mm.dd.yy',
        momentFormat: jse.core.config.get('languageCode') === 'de' ? 'DD.MM.YY' : 'MM.DD.YY',
        applyButtonText: jse.core.lang.translate('apply', 'buttons'),
        cancelButtonText: jse.core.lang.translate('close', 'buttons'),
        datepickerOptions: {
            numberOfMonths: 2,
            changeMonth: true,
            changeYear: true,
            maxDate: null,
            minDate: new Date(1970, 1, 1),
            dayNamesMin: [jse.core.lang.translate('_SUNDAY_SHORT', 'general'), jse.core.lang.translate('_MONDAY_SHORT', 'general'), jse.core.lang.translate('_TUESDAY_SHORT', 'general'), jse.core.lang.translate('_WEDNESDAY_SHORT', 'general'), jse.core.lang.translate('_THURSDAY_SHORT', 'general'), jse.core.lang.translate('_FRIDAY_SHORT', 'general'), jse.core.lang.translate('_SATURDAY_SHORT', 'general')],
            monthNamesShort: [jse.core.lang.translate('_JANUARY_SHORT', 'general'), jse.core.lang.translate('_FEBRUARY_SHORT', 'general'), jse.core.lang.translate('_MARCH_SHORT', 'general'), jse.core.lang.translate('_APRIL_SHORT', 'general'), jse.core.lang.translate('_MAY_SHORT', 'general'), jse.core.lang.translate('_JUNE_SHORT', 'general'), jse.core.lang.translate('_JULY_SHORT', 'general'), jse.core.lang.translate('_AUGUST_SHORT', 'general'), jse.core.lang.translate('_SEPTEMBER_SHORT', 'general'), jse.core.lang.translate('_OCTOBER_SHORT', 'general'), jse.core.lang.translate('_NOVEMBER_SHORT', 'general'), jse.core.lang.translate('_DECEMBER_SHORT', 'general')],
            monthNames: [jse.core.lang.translate('_JANUARY', 'general'), jse.core.lang.translate('_FEBRUARY', 'general'), jse.core.lang.translate('_MARCH', 'general'), jse.core.lang.translate('_APRIL', 'general'), jse.core.lang.translate('_MAY', 'general'), jse.core.lang.translate('_JUNE', 'general'), jse.core.lang.translate('_JULY', 'general'), jse.core.lang.translate('_AUGUST', 'general'), jse.core.lang.translate('_SEPTEMBER', 'general'), jse.core.lang.translate('_OCTOBER', 'general'), jse.core.lang.translate('_NOVEMBER', 'general'), jse.core.lang.translate('_DECEMBER', 'general')]
        },
        onChange: function onChange() {
            var range = $this.siblings('.daterangepicker-helper').daterangepicker('getRange'),
                start = moment(range.start).format(defaults.momentFormat),
                end = moment(range.end).format(defaults.momentFormat),
                value = start !== end ? start + ' - ' + end : '' + start;
            $this.val(value);
        },
        onClose: function onClose() {
            if ($this.val() === '') {
                $this.siblings('i').fadeIn();
            }
        }
    };

    /**
     * Final Options
     *
     * @type {Object}
     */
    var options = $.extend(true, {}, defaults, data);

    /**
     * Module Instance
     *
     * @type {Object}
     */
    var module = {};

    // ------------------------------------------------------------------------
    // FUNCTIONS
    // ------------------------------------------------------------------------

    /**
     * Update the range of the daterangepicker instance.
     *
     * Moment JS will try to parse the date string and will provide a value even if user's value is not
     * a complete date.
     */
    function _updateDaterangepicker() {
        try {
            if ($this.val() === '') {
                return;
            }

            var val = $this.val().split('-');
            var range = {};

            if (val.length === 1) {
                // Single date was selected. 
                range.start = range.end = moment(val[0], options.momentFormat).toDate();
            } else {
                // Date range was selected.
                range.start = moment(val[0], options.momentFormat).toDate();
                range.end = moment(val[1], options.momentFormat).toDate();
            }

            $this.siblings('.daterangepicker-helper').daterangepicker('setRange', range);
        } catch (error) {
            // Could not parse the date, do not update the input value.
            jse.core.debug.error('Daterangepicker Update Error:', error);
        }
    }

    /**
     * On Input Click/Focus Event
     *
     * Display the daterangepicker modal.
     */
    function _onInputClick() {
        if (!$('.comiseo-daterangepicker').is(':visible')) {
            $this.siblings('.daterangepicker-helper').daterangepicker('open');
            $this.siblings('i').fadeOut();
            $(document).trigger('click.sumo'); // Sumo Select compatibility for table-filter rows. 
        }
    }

    /**
     * On Input Key Down
     *
     * If the use presses the escape or tab key, close the daterangepicker modal. Otherwise if the user
     * presses the enter then the current value needs to be applied to daterangepicker.
     *
     * @param {Object} event
     */
    function _onInputKeyDown(event) {
        if (event.which === ESC_KEY_CODE || event.which === TAB_KEY_CODE) {
            // Close the daterangepicker modal. 
            $this.siblings('.daterangepicker-helper').daterangepicker('close');
            $this.blur();
        }
    }

    // ------------------------------------------------------------------------
    // INITIALIZATION
    // ------------------------------------------------------------------------

    module.init = function (done) {
        // Daterangepicker needs to be loaded after jquery UI.
        var dependencies = [jse.source + '/vendor/jquery-ui-daterangepicker/jquery.comiseo.daterangepicker.min.js'];

        window.require(dependencies, function () {
            $this.wrap('<div class="daterangepicker-wrapper"></div>').parent().append('<i class="fa fa-calendar"></i>').append('<input type="text" class="daterangepicker-helper hidden" />').find('.daterangepicker-helper').daterangepicker(options);

            $this.siblings('button').css({
                visibility: 'hidden', // Hide the auto-generated button. 
                position: 'absolute' // Remove it from the normal flow.
            });

            $this.on('click, focus', _onInputClick).on('keydown', _onInputKeyDown).on('change', _updateDaterangepicker);

            done();
        });
    };

    return module;
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRhdGVyYW5nZXBpY2tlci5qcyJdLCJuYW1lcyI6WyJqc2UiLCJ3aWRnZXRzIiwibW9kdWxlIiwic291cmNlIiwiZGF0YSIsIkVTQ19LRVlfQ09ERSIsIlRBQl9LRVlfQ09ERSIsIiR0aGlzIiwiJCIsImRlZmF1bHRzIiwicHJlc2V0UmFuZ2VzIiwiZGF0ZUZvcm1hdCIsImNvcmUiLCJjb25maWciLCJnZXQiLCJtb21lbnRGb3JtYXQiLCJhcHBseUJ1dHRvblRleHQiLCJsYW5nIiwidHJhbnNsYXRlIiwiY2FuY2VsQnV0dG9uVGV4dCIsImRhdGVwaWNrZXJPcHRpb25zIiwibnVtYmVyT2ZNb250aHMiLCJjaGFuZ2VNb250aCIsImNoYW5nZVllYXIiLCJtYXhEYXRlIiwibWluRGF0ZSIsIkRhdGUiLCJkYXlOYW1lc01pbiIsIm1vbnRoTmFtZXNTaG9ydCIsIm1vbnRoTmFtZXMiLCJvbkNoYW5nZSIsInJhbmdlIiwic2libGluZ3MiLCJkYXRlcmFuZ2VwaWNrZXIiLCJzdGFydCIsIm1vbWVudCIsImZvcm1hdCIsImVuZCIsInZhbHVlIiwidmFsIiwib25DbG9zZSIsImZhZGVJbiIsIm9wdGlvbnMiLCJleHRlbmQiLCJfdXBkYXRlRGF0ZXJhbmdlcGlja2VyIiwic3BsaXQiLCJsZW5ndGgiLCJ0b0RhdGUiLCJlcnJvciIsImRlYnVnIiwiX29uSW5wdXRDbGljayIsImlzIiwiZmFkZU91dCIsImRvY3VtZW50IiwidHJpZ2dlciIsIl9vbklucHV0S2V5RG93biIsImV2ZW50Iiwid2hpY2giLCJibHVyIiwiaW5pdCIsImRvbmUiLCJkZXBlbmRlbmNpZXMiLCJ3aW5kb3ciLCJyZXF1aXJlIiwid3JhcCIsInBhcmVudCIsImFwcGVuZCIsImZpbmQiLCJjc3MiLCJ2aXNpYmlsaXR5IiwicG9zaXRpb24iLCJvbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7OztBQVVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQUEsSUFBSUMsT0FBSixDQUFZQyxNQUFa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ZW50IjpbIi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiBkYXRlcmFuZ2VwaWNrZXIuanMgMjAxNi0wNC0yOFxyXG4gR2FtYmlvIEdtYkhcclxuIGh0dHA6Ly93d3cuZ2FtYmlvLmRlXHJcbiBDb3B5cmlnaHQgKGMpIDIwMTYgR2FtYmlvIEdtYkhcclxuIFJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKVxyXG4gW2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWxdXHJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBEYXRlIFJhbmdlIFBpY2tlclxyXG4gKlxyXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBqUXVlcnkgVUkgRGF0ZXJhbmdlcGlja2VyIHdpZGdldCB3aGljaCBlbmFibGVzIHRoZSB1c2VyIHRvIHNlbGVjdFxyXG4gKiBhIGN1c3RvbSBkYXRlIHJhbmdlIGluIHRoZSBzYW1lIGRhdGVwaWNrZXIsIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgalF1ZXJ5IFVJLlxyXG4gKlxyXG4gKiBUaGlzIHdpZGdldCByZXF1aXJlcyB0aGUgXCJnZW5lcmFsXCIgdHJhbnNsYXRpb24gc2VjdGlvbiBpbiBvcmRlciB0byB0cmFuc2xhdGUgdGhlIGRheVxyXG4gKiBhbmQgbW9udGggbmFtZXMuXHJcbiAqXHJcbiAqICMjIyBPcHRpb25zXHJcbiAqXHJcbiAqIFlvdSBjYW4gcHJvdmlkZSBhbGwgdGhlIG9wdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBzaXRlIGFzIGRhdGEgYXR0cmlidXRlczpcclxuICpcclxuICoge0BsaW5rIGh0dHA6Ly90YW1ibGUuZ2l0aHViLmlvL2pxdWVyeS11aS1kYXRlcmFuZ2VwaWNrZXIvI29wdGlvbnN9XHJcbiAqXHJcbiAqICMjIyBFeGFtcGxlXHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZGF0YS1qc2Utd2lkZ2V0PVwiZGF0ZXJhbmdlcGlja2VyXCIgZGF0YS1kYXRlcmFuZ2VwaWNrZXItZGF0ZS1mb3JtYXQ9XCJkZC5tbS55eVwiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RhbWJsZS9qcXVlcnktdWktZGF0ZXJhbmdlcGlja2VyfVxyXG4gKlxyXG4gKiBAbW9kdWxlIEpTRS9XaWRnZXRzL2RhdGFyYW5nZXBpY2tlclxyXG4gKiBAcmVxdWlyZXMgalF1ZXJ5VUktRGF0ZXJhbmdlcGlja2VyXHJcbiAqL1xyXG5qc2Uud2lkZ2V0cy5tb2R1bGUoXHJcbiAgICAnZGF0ZXJhbmdlcGlja2VyJyxcclxuXHJcbiAgICBbXHJcbiAgICAgICAgYCR7anNlLnNvdXJjZX0vdmVuZG9yL2pxdWVyeS11aS1kaXN0L2pxdWVyeS11aS5taW4uY3NzYCxcclxuICAgICAgICBgJHtqc2Uuc291cmNlfS92ZW5kb3IvanF1ZXJ5LXVpLWRpc3QvanF1ZXJ5LXVpLm1pbi5qc2AsXHJcbiAgICAgICAgYCR7anNlLnNvdXJjZX0vdmVuZG9yL21vbWVudGpzL21vbWVudC5taW4uanNgLFxyXG4gICAgICAgIGAke2pzZS5zb3VyY2V9L3ZlbmRvci9qcXVlcnktdWktZGF0ZXJhbmdlcGlja2VyL2pxdWVyeS5jb21pc2VvLmRhdGVyYW5nZXBpY2tlci5taW4uY3NzYFxyXG4gICAgXSxcclxuXHJcbiAgICBmdW5jdGlvbiAoZGF0YSkge1xyXG5cclxuICAgICAgICAndXNlIHN0cmljdCc7XHJcblxyXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgIC8vIFZBUklBQkxFU1xyXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBFc2NhcGUgS2V5IENvZGVcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgRVNDX0tFWV9DT0RFID0gMjc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRhYiBLZXkgQ29kZVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge051bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBUQUJfS0VZX0NPREUgPSA5O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNb2R1bGUgU2VsZWN0b3JcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZWZhdWx0IE9wdGlvbnNcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgICAgIHByZXNldFJhbmdlczogW10sXHJcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGpzZS5jb3JlLmNvbmZpZy5nZXQoJ2xhbmd1YWdlQ29kZScpID09PSAnZGUnID8gJ2RkLm1tLnl5JyA6ICdtbS5kZC55eScsXHJcbiAgICAgICAgICAgIG1vbWVudEZvcm1hdDoganNlLmNvcmUuY29uZmlnLmdldCgnbGFuZ3VhZ2VDb2RlJykgPT09ICdkZScgPyAnREQuTU0uWVknIDogJ01NLkRELllZJyxcclxuICAgICAgICAgICAgYXBwbHlCdXR0b25UZXh0OiBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnYXBwbHknLCAnYnV0dG9ucycpLFxyXG4gICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnY2xvc2UnLCAnYnV0dG9ucycpLFxyXG4gICAgICAgICAgICBkYXRlcGlja2VyT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZNb250aHM6IDIsXHJcbiAgICAgICAgICAgICAgICBjaGFuZ2VNb250aDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNoYW5nZVllYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBtYXhEYXRlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbWluRGF0ZTogbmV3IERhdGUoMTk3MCwgMSwgMSksXHJcbiAgICAgICAgICAgICAgICBkYXlOYW1lc01pbjogW1xyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfU1VOREFZX1NIT1JUJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX01PTkRBWV9TSE9SVCcsICdnZW5lcmFsJyksXHJcbiAgICAgICAgICAgICAgICAgICAganNlLmNvcmUubGFuZy50cmFuc2xhdGUoJ19UVUVTREFZX1NIT1JUJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX1dFRE5FU0RBWV9TSE9SVCcsICdnZW5lcmFsJyksXHJcbiAgICAgICAgICAgICAgICAgICAganNlLmNvcmUubGFuZy50cmFuc2xhdGUoJ19USFVSU0RBWV9TSE9SVCcsICdnZW5lcmFsJyksXHJcbiAgICAgICAgICAgICAgICAgICAganNlLmNvcmUubGFuZy50cmFuc2xhdGUoJ19GUklEQVlfU0hPUlQnLCAnZ2VuZXJhbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfU0FUVVJEQVlfU0hPUlQnLCAnZ2VuZXJhbCcpXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbXHJcbiAgICAgICAgICAgICAgICAgICAganNlLmNvcmUubGFuZy50cmFuc2xhdGUoJ19KQU5VQVJZX1NIT1JUJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX0ZFQlJVQVJZX1NIT1JUJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX01BUkNIX1NIT1JUJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX0FQUklMX1NIT1JUJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX01BWV9TSE9SVCcsICdnZW5lcmFsJyksXHJcbiAgICAgICAgICAgICAgICAgICAganNlLmNvcmUubGFuZy50cmFuc2xhdGUoJ19KVU5FX1NIT1JUJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX0pVTFlfU0hPUlQnLCAnZ2VuZXJhbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfQVVHVVNUX1NIT1JUJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX1NFUFRFTUJFUl9TSE9SVCcsICdnZW5lcmFsJyksXHJcbiAgICAgICAgICAgICAgICAgICAganNlLmNvcmUubGFuZy50cmFuc2xhdGUoJ19PQ1RPQkVSX1NIT1JUJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX05PVkVNQkVSX1NIT1JUJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX0RFQ0VNQkVSX1NIT1JUJywgJ2dlbmVyYWwnKVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIG1vbnRoTmFtZXM6IFtcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX0pBTlVBUlknLCAnZ2VuZXJhbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfRkVCUlVBUlknLCAnZ2VuZXJhbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfTUFSQ0gnLCAnZ2VuZXJhbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfQVBSSUwnLCAnZ2VuZXJhbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfTUFZJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX0pVTkUnLCAnZ2VuZXJhbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfSlVMWScsICdnZW5lcmFsJyksXHJcbiAgICAgICAgICAgICAgICAgICAganNlLmNvcmUubGFuZy50cmFuc2xhdGUoJ19BVUdVU1QnLCAnZ2VuZXJhbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfU0VQVEVNQkVSJywgJ2dlbmVyYWwnKSxcclxuICAgICAgICAgICAgICAgICAgICBqc2UuY29yZS5sYW5nLnRyYW5zbGF0ZSgnX09DVE9CRVInLCAnZ2VuZXJhbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfTk9WRU1CRVInLCAnZ2VuZXJhbCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzZS5jb3JlLmxhbmcudHJhbnNsYXRlKCdfREVDRU1CRVInLCAnZ2VuZXJhbCcpXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmFuZ2UgPSAkdGhpcy5zaWJsaW5ncygnLmRhdGVyYW5nZXBpY2tlci1oZWxwZXInKS5kYXRlcmFuZ2VwaWNrZXIoJ2dldFJhbmdlJyksXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQocmFuZ2Uuc3RhcnQpLmZvcm1hdChkZWZhdWx0cy5tb21lbnRGb3JtYXQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1vbWVudChyYW5nZS5lbmQpLmZvcm1hdChkZWZhdWx0cy5tb21lbnRGb3JtYXQpLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKHN0YXJ0ICE9PSBlbmQpID8gYCR7c3RhcnR9IC0gJHtlbmR9YCA6IGAke3N0YXJ0fWA7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy52YWwodmFsdWUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJHRoaXMudmFsKCkgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMuc2libGluZ3MoJ2knKS5mYWRlSW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZpbmFsIE9wdGlvbnNcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBkZWZhdWx0cywgZGF0YSk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1vZHVsZSBJbnN0YW5jZVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBtb2R1bGUgPSB7fTtcclxuXHJcbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgLy8gRlVOQ1RJT05TXHJcbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVwZGF0ZSB0aGUgcmFuZ2Ugb2YgdGhlIGRhdGVyYW5nZXBpY2tlciBpbnN0YW5jZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIE1vbWVudCBKUyB3aWxsIHRyeSB0byBwYXJzZSB0aGUgZGF0ZSBzdHJpbmcgYW5kIHdpbGwgcHJvdmlkZSBhIHZhbHVlIGV2ZW4gaWYgdXNlcidzIHZhbHVlIGlzIG5vdFxyXG4gICAgICAgICAqIGEgY29tcGxldGUgZGF0ZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBmdW5jdGlvbiBfdXBkYXRlRGF0ZXJhbmdlcGlja2VyKCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCR0aGlzLnZhbCgpID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSAkdGhpcy52YWwoKS5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkgeyAvLyBTaW5nbGUgZGF0ZSB3YXMgc2VsZWN0ZWQuIFxyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0ID0gcmFuZ2UuZW5kID0gbW9tZW50KHZhbFswXSwgb3B0aW9ucy5tb21lbnRGb3JtYXQpLnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gRGF0ZSByYW5nZSB3YXMgc2VsZWN0ZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBtb21lbnQodmFsWzBdLCBvcHRpb25zLm1vbWVudEZvcm1hdCkudG9EYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kID0gbW9tZW50KHZhbFsxXSwgb3B0aW9ucy5tb21lbnRGb3JtYXQpLnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICR0aGlzLnNpYmxpbmdzKCcuZGF0ZXJhbmdlcGlja2VyLWhlbHBlcicpLmRhdGVyYW5nZXBpY2tlcignc2V0UmFuZ2UnLCByYW5nZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDb3VsZCBub3QgcGFyc2UgdGhlIGRhdGUsIGRvIG5vdCB1cGRhdGUgdGhlIGlucHV0IHZhbHVlLlxyXG4gICAgICAgICAgICAgICAganNlLmNvcmUuZGVidWcuZXJyb3IoJ0RhdGVyYW5nZXBpY2tlciBVcGRhdGUgRXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbiBJbnB1dCBDbGljay9Gb2N1cyBFdmVudFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogRGlzcGxheSB0aGUgZGF0ZXJhbmdlcGlja2VyIG1vZGFsLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZ1bmN0aW9uIF9vbklucHV0Q2xpY2soKSB7XHJcbiAgICAgICAgICAgIGlmICghJCgnLmNvbWlzZW8tZGF0ZXJhbmdlcGlja2VyJykuaXMoJzp2aXNpYmxlJykpIHtcclxuICAgICAgICAgICAgICAgICR0aGlzLnNpYmxpbmdzKCcuZGF0ZXJhbmdlcGlja2VyLWhlbHBlcicpLmRhdGVyYW5nZXBpY2tlcignb3BlbicpO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMuc2libGluZ3MoJ2knKS5mYWRlT3V0KCk7XHJcbiAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdjbGljay5zdW1vJyk7IC8vIFN1bW8gU2VsZWN0IGNvbXBhdGliaWxpdHkgZm9yIHRhYmxlLWZpbHRlciByb3dzLiBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT24gSW5wdXQgS2V5IERvd25cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIElmIHRoZSB1c2UgcHJlc3NlcyB0aGUgZXNjYXBlIG9yIHRhYiBrZXksIGNsb3NlIHRoZSBkYXRlcmFuZ2VwaWNrZXIgbW9kYWwuIE90aGVyd2lzZSBpZiB0aGUgdXNlclxyXG4gICAgICAgICAqIHByZXNzZXMgdGhlIGVudGVyIHRoZW4gdGhlIGN1cnJlbnQgdmFsdWUgbmVlZHMgdG8gYmUgYXBwbGllZCB0byBkYXRlcmFuZ2VwaWNrZXIuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICBmdW5jdGlvbiBfb25JbnB1dEtleURvd24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LndoaWNoID09PSBFU0NfS0VZX0NPREUgfHwgZXZlbnQud2hpY2ggPT09IFRBQl9LRVlfQ09ERSkgeyAvLyBDbG9zZSB0aGUgZGF0ZXJhbmdlcGlja2VyIG1vZGFsLiBcclxuICAgICAgICAgICAgICAgICR0aGlzLnNpYmxpbmdzKCcuZGF0ZXJhbmdlcGlja2VyLWhlbHBlcicpLmRhdGVyYW5nZXBpY2tlcignY2xvc2UnKTtcclxuICAgICAgICAgICAgICAgICR0aGlzLmJsdXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgLy8gSU5JVElBTElaQVRJT05cclxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbiAoZG9uZSkge1xyXG4gICAgICAgICAgICAvLyBEYXRlcmFuZ2VwaWNrZXIgbmVlZHMgdG8gYmUgbG9hZGVkIGFmdGVyIGpxdWVyeSBVSS5cclxuICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gW1xyXG4gICAgICAgICAgICAgICAgYCR7anNlLnNvdXJjZX0vdmVuZG9yL2pxdWVyeS11aS1kYXRlcmFuZ2VwaWNrZXIvanF1ZXJ5LmNvbWlzZW8uZGF0ZXJhbmdlcGlja2VyLm1pbi5qc2BcclxuICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKGRlcGVuZGVuY2llcywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgJHRoaXNcclxuICAgICAgICAgICAgICAgICAgICAud3JhcCgnPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci13cmFwcGVyXCI+PC9kaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAucGFyZW50KClcclxuICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCc8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCI+PC9pPicpXHJcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItaGVscGVyIGhpZGRlblwiIC8+JylcclxuICAgICAgICAgICAgICAgICAgICAuZmluZCgnLmRhdGVyYW5nZXBpY2tlci1oZWxwZXInKVxyXG4gICAgICAgICAgICAgICAgICAgIC5kYXRlcmFuZ2VwaWNrZXIob3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICAgICAgJHRoaXMuc2libGluZ3MoJ2J1dHRvbicpLmNzcyh7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsIC8vIEhpZGUgdGhlIGF1dG8tZ2VuZXJhdGVkIGJ1dHRvbi4gXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScgLy8gUmVtb3ZlIGl0IGZyb20gdGhlIG5vcm1hbCBmbG93LlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJHRoaXNcclxuICAgICAgICAgICAgICAgICAgICAub24oJ2NsaWNrLCBmb2N1cycsIF9vbklucHV0Q2xpY2spXHJcbiAgICAgICAgICAgICAgICAgICAgLm9uKCdrZXlkb3duJywgX29uSW5wdXRLZXlEb3duKVxyXG4gICAgICAgICAgICAgICAgICAgIC5vbignY2hhbmdlJywgX3VwZGF0ZURhdGVyYW5nZXBpY2tlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gbW9kdWxlO1xyXG5cclxuICAgIH0pO1xyXG4iXX0=

Youez - 2016 - github.com/yon3zu
LinuXploit